use*_*537 2 python qt pyqt qmenu qmenubar
我想创建一个函数来构建可以动态添加到窗口菜单栏的上下文菜单。考虑以下添加简单 QMenu 的最小示例:
from PyQt5 import QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
menu = QtWidgets.QMenu('Menu', parent=self)
act1 = menu.addAction('Action 1')
act2 = menu.addAction('Action 2')
self.menuBar().addMenu(menu)
app = QtWidgets.QApplication([])
window = MainWindow()
window.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
这按预期工作。请注意,需要设置 QMenu 的父项才能显示它。
现在,如果我将菜单代码分解为它自己的函数并显式设置父级,我会得到以下结果。这里发生了什么?
from PyQt5 import QtWidgets
def createMenu():
menu = QtWidgets.QMenu('Menu')
act1 = menu.addAction('Action 1')
act2 = menu.addAction('Action 2')
return menu
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
menu = createMenu()
menu.setParent(self)
self.menuBar().addMenu(menu)
app = QtWidgets.QApplication([])
window = MainWindow()
window.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
您调用的方式会setParent重置窗口标志,因此请执行以下操作:
menu.setParent(self, menu.windowFlags())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |