QMenu.item.selected таблица стилей не работает

Я пытаюсь сделать элементы в qmenu, когда они наведены, чтобы стать серыми, так как с таблицей стилей fusion, которую я применил, они становятся белыми, когда зависли. К сожалению, моя таблица стилей не применяется. Я искал, и я обнаружил, что я должен сделать "зависание", чтобы быть "выбранным", и я сделал это, но без изменений.

from PyQt5.QtWidgets import (QWidget, QPushButton, QApplication, QMessageBox, QRadioButton, QMainWindow, QLabel, QListWidget, QListWidgetItem,
                             QDesktopWidget, QCheckBox, QPlainTextEdit, QHBoxLayout, QVBoxLayout, QGridLayout, QStackedWidget, QFormLayout, QMenu,
                             QComboBox, QScrollArea, QLineEdit, QGroupBox, QListView, QToolTip, QFileDialog, QTabWidget, QAction, QInputDialog)

from PyQt5.QtGui import QIcon, QFont, QRegExpValidator, QStandardItemModel, QStandardItem, QIcon
from PyQt5.QtCore import Qt, QRegExp, QModelIndex

class WindowGUI(QMainWindow):
    def __init__(self, gui):
        super().__init__()
        self.initUI(gui)

    def initUI(self, gui): #Initializing basic GUI
        self.setGeometry(QDesktopWidget().screenGeometry())
        self.showMaximized()

        self.setWindowTitle("ScheduleO")
        self.setWindowIcon(QIcon("icons/schedule.png")); 

        self.menu = self.menuBar()

        self.SCHMenu = self.menu.addMenu("Schedule")
        self.SCHFormat = QAction("New Schedule Format", self)
        self.SCHApply = QAction("Apply Schedule Format...", self)

        #This is where the issue is
        self.menu.setStyleSheet("font: 12pt; background-color: white; QMenu.item.selected {color: gray}")

if __name__ == '__main__':

    app = QApplication(sys.argv)
    app.setStyle("fusion")

    userGUI = UserGUI() #It is not shown, but I have it in my code

    windowGUI = WindowGUI(userGUI)
    windowGUI.show()

    sys.exit(app.exec_())

Более того, когда я пытался

self.menu.setStyleSheet("QMenu {font: 12pt; background-color: white;}; QMenu.item.selected {color: gray}")

Вся таблица стилей не применяется

Есть ли проблема с моим селектором QMenu?

1 ответ

Решение

Попытайся:

import sys
from PyQt5.QtWidgets import (QWidget, QPushButton, QApplication, QMessageBox, QRadioButton, QMainWindow, QLabel, QListWidget, QListWidgetItem,
                             QDesktopWidget, QCheckBox, QPlainTextEdit, QHBoxLayout, QVBoxLayout, QGridLayout, QStackedWidget, QFormLayout, QMenu,
                             QComboBox, QScrollArea, QLineEdit, QGroupBox, QListView, QToolTip, QFileDialog, QTabWidget, QAction, QInputDialog)

from PyQt5.QtGui  import QIcon, QFont, QRegExpValidator, QStandardItemModel, QStandardItem, QIcon
from PyQt5.QtCore import Qt, QRegExp, QModelIndex

class WindowGUI(QMainWindow):
    def __init__(self):     #, gui):
        super().__init__()
        self.initUI()       #(gui)

    def initUI(self):       #, gui):             #Initializing basic GUI
        self.setGeometry(QDesktopWidget().screenGeometry())
        self.showMaximized()

        self.setWindowTitle("ScheduleO")
        self.setWindowIcon(QIcon("E:/_Qt/img/qt-logo.png")) #("icons/schedule.png")); 

        self.menu = self.menuBar()

        self.SCHMenu   = self.menu.addMenu("Schedule")
        self.SCHFormat = QAction("New Schedule Format", self)
        self.SCHApply  = QAction("Apply Schedule Format...", self)

        self.SCHApply.setData('option2') #@
        self.SCHMenu.addAction(self.SCHFormat)
        self.SCHMenu.addAction(self.SCHApply)

        #This is where the issue is
#        self.menu.setStyleSheet("font: 12pt; background-color: white; QMenu.item.selected {color: gray}")
#        self.menu.setStyleSheet("QMenu {font: 12pt; background-color: white;}; QMenu.item.selected {color: gray}")        

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyle("fusion")

    app.setStyleSheet("""    
        QMenu
        {
            font: 12pt;
            background-color: white;
        }

        QMenu::item:selected
        {
            color: gray;
        }
     """)    

#    userGUI = UserGUI() 
    windowGUI = WindowGUI() # (userGUI)
    windowGUI.show()
    sys.exit(app.exec_())

Строка Python, содержащая форматирование, отправляется непосредственно в серверную часть C++. Это означает, что вы должны использовать оператор:: (разрешение области) и: (список инициализации). Примеры см. В документации:

https://doc.qt.io/qt-5/stylesheet-examples.html

Также необходимо учитывать область действия Qt, например, где вы применяете таблицу стилей и к каким типам. Я думаю, может быть, вы собирались сделать что-то вроде этого? Выбранный размер шрифта и цвета, чтобы показать четкую разницу.

self.menu.setStyleSheet(
    """
    QMenu
    {
        font: 18pt;
        background-color: purple;
    }

    QMenu::item:selected
    {
        color: green
    }
    """
    )

Полный пример будет выглядеть так.

import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QDesktopWidget)
from PyQt5.QtGui import QIcon


class WindowGUI(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setGeometry(QDesktopWidget().screenGeometry())
        self.showMaximized()

        self.setWindowTitle("ScheduleO")
        self.setWindowIcon(QIcon("icons/schedule.png"));

        self.menu = self.menuBar()
        self.SCHMenu = self.menu.addMenu("Schedule")
        self.SCHMenu.addAction("New Schedule Format")
        self.SCHMenu.addAction("Apply Schedule Format...")

        # Issue should be fixed.
        self.menu.setStyleSheet(
            """
            QMenu
            {
                font: 18pt;
                background-color: purple;
            }

            QMenu::item:selected
            {
                background-color: green
            }
            """
            )


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyle("fusion")

    windowGUI = WindowGUI()
    windowGUI.show()

    sys.exit(app.exec_())

Образец изображения можно найти здесь (у вас недостаточно репутации, чтобы размещать изображения.

Другие вопросы по тегам