ColinDuquesnoy / QDarkStyleSheet

A dark style sheet for QtWidgets application
Other
2.76k stars 725 forks source link

Custom style of specific widget #330

Closed Luyaojun closed 1 year ago

Luyaojun commented 1 year ago

Environment

[Description of the issue] I have some sprcific widgets with another style. And it will be disabled. For example:

self.table_view = QTableView(self)
self.table_view.setStyleSheet(
    '''
    QTableView{
        border: 1px solid rgb(45, 45, 45);
        gridline-color: rgb(60, 60, 60);
        background-color: red;
        selection-background-color: green;
    }
    '''
)

Without using QDarkStyleSheet, the cell item will be green when it is selected. And After invoking app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) , the item will be a dark style. Is there any suggestions to solve the problem? Thank you~

dpizetta commented 1 year ago

@Luyaojun thanks for the contact. You can append the patch you made in the end of the stylesheet provided by qdarkstyle. Something like this:

mypatch = ''' QTableView{ border: 1px solid rgb(45, 45, 45); gridline-color: rgb(60, 60, 60); background-color: red; selection-background-color: green; } '''

style = qdarkstyle.load_stylesheet_pyqt5() app.setStyleSheet(style + mypatch)

You also avoid using style changes over the code and have everything in one place. If you want this change on a specific object, you can use the css properties to do that. I hope this works for you.

Luyaojun commented 1 year ago

Thanks for your reply! The first method works for me, and I learned more about the stylesheet. I adjust the property and now it met my need.

Luyaojun commented 1 year ago

Sorry to bother you again. Is it possible to modify its style dynamically? I need to change the background color of selected items according to their data. It seems that no ItemDataRole matches the selected situation?

Luyaojun commented 1 year ago

I tried the code below:

app = QApplication.instance()
dark_style_sheet = qdarkstyle.load_stylesheet_pyqt5()
dynamic_style = '''
    QTableView#tableView_task::item:selected{
        background: red;
        color: white;
    }
'''
app.setStyleSheet(dark_style_sheet + dynamic_style)

It works fine, but may be not elegant. Appreciate for any suggestions in advance!