python - PyQt5 在 menuBar 中自定义 QAction 的样式
问题描述
我发现了非常相似的问题,但没有针对此问题的合理解决方案。我想更改显示在 QMainWindow menuBar 菜单中的 QActions 的样式/外观(例如更改背景颜色)。目的是在再次浏览菜单时突出显示当前选择的操作。
例子:
from PyQt5 import QtWidgets, QtCore
class Window(QtWidgets.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.setGeometry(50, 50, 500, 300)
action1 = QtWidgets.QAction("action1", self)
action2 = QtWidgets.QAction("action2", self)
action1.triggered.connect(self.print_stuff)
action2.triggered.connect(self.print_stuff)
mainMenu = self.menuBar()
mainMenu.setNativeMenuBar(False)
fileMenu = mainMenu.addMenu('Menu1')
fileMenu.addAction(action1)
fileMenu.addAction(action2)
def print_stuff(self):
print('whatever')
def run():
app = QtWidgets.QApplication([])
application = Window()
application.show()
app.exec_()
run()
可以更改 menuBar 中单个菜单的 StyleSheet,但我无法更改 QActions 的 StyleSheet,因为它们不是小部件。然而,修改背景似乎是可能的,因为 QActions 在用鼠标悬停时会突出显示——就像菜单栏中的菜单一样。有任何想法吗?
解决方案
from PyQt5 import QtWidgets, QtCore, QtGui
class Window(QtWidgets.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.setGeometry(50, 50, 500, 300)
mainMenu = self.menuBar()
mainMenu.setNativeMenuBar(False)
fileMenu = mainMenu.addMenu('Menu1')
action1 = QtWidgets.QAction("action1", self)
action2 = QtWidgets.QAction("action2", self)
action3 = QtWidgets.QWidgetAction(fileMenu)
l = QtWidgets.QLabel("action3")
l.setStyleSheet("QLabel { background-color : red; padding: 4 4 4 4px;}")
action3.setDefaultWidget(l)
fileMenu.addAction(action1)
fileMenu.addAction(action2)
fileMenu.addAction(action3)
action1.triggered.connect(self.print_stuff)
action2.triggered.connect(self.print_stuff)
action3.triggered.connect(self.print_stuff)
def print_stuff(self):
print('whatever')
def run():
app = QtWidgets.QApplication([])
application = Window()
application.show()
app.exec_()
run()
结果:
推荐阅读
- swift - 无法转换“URL”类型的值?到预期的参数类型“数据”
- android - android sdk 中的 NDK(并排)是什么?
- bitcoin - 通过 https 访问比特币节点
- c# - 将 DataTables 绑定到 WPF Tabcontrol 上的 Datagrids
- javascript - React-Native Picker TypeError:无法读取未定义的属性“地图”
- javascript - 用于验证的 ajax 成功函数中的两个字段的焦点冲突
- android - 检查设备是否使用 androidx 生物识别提示启用了生物识别功能
- angular - 我使用“angular-froala-wysiwyg”,但菜单栏减少了
- angular - 当父组件中的选择发生(更改)时如何在子组件中执行函数
- flutter - 为什么我的 VS 代码终端无法识别“颤振”一词?