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_())
Образец изображения можно найти здесь (у вас недостаточно репутации, чтобы размещать изображения.