在我的主要 Window 之外的小部件中创建的 QMenu 没有出现
QMenu created in a widget outside of my main Window doesn't appear
我在主 window 之外的小部件中创建了一个 QMenu,但是当我尝试在我的应用程序中显示它时,它根本没有出现。
如果我在我的主 window class 中创建完全相同的 QMenu,它似乎没有任何问题。
from PyQt5.QtWidgets import (
QApplication,
QHBoxLayout,
QWidget,
QPushButton,
QMenu,
QAction
)
from PyQt5 import QtCore
class testWidget(QWidget):
def __init__(self):
menu = QMenu()
action = QAction("Test", checkable = True)
menu.addAction(action)
menu.addSeparator()
self.menu = menu
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Test pricer")
self.mainLayout = QHBoxLayout()
self.setLayout(self.mainLayout)
self.resize(900, 600)
self.button = QPushButton("Show menu")
self.button.clicked.connect(self.showMenu)
self.mainLayout.addWidget(self.button)
self.testWidget = testWidget()
def showMenu(self):
print(self.testWidget.menu.actions())
#self.testWidget.menu.setParent(self)
self.testWidget.menu.exec_(QtCore.QPoint(200, 200))
if __name__ == "__main__":
app = 0
app = QApplication([])
window = Window()
window.show()
app.exec_()
我尝试将菜单的父级更改为主菜单 window 但这也没有解决问题。
有人知道在另一个小部件中创建菜单的同时显示菜单的方法吗?
显示了 QMenu 但没有显示“测试”项,因此 window 非常小。 “Test”不显示,因为 QAction 被删除,因为它是一个局部变量,没有其他变量拥有所有权。有2个解决方案:
将父级传递给 QAction:action = QAction("Test", checkable = True, parent=menu)
通过将 action
更改为 self.action
,使 QAction 成为 class 的属性。
我在主 window 之外的小部件中创建了一个 QMenu,但是当我尝试在我的应用程序中显示它时,它根本没有出现。
如果我在我的主 window class 中创建完全相同的 QMenu,它似乎没有任何问题。
from PyQt5.QtWidgets import (
QApplication,
QHBoxLayout,
QWidget,
QPushButton,
QMenu,
QAction
)
from PyQt5 import QtCore
class testWidget(QWidget):
def __init__(self):
menu = QMenu()
action = QAction("Test", checkable = True)
menu.addAction(action)
menu.addSeparator()
self.menu = menu
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Test pricer")
self.mainLayout = QHBoxLayout()
self.setLayout(self.mainLayout)
self.resize(900, 600)
self.button = QPushButton("Show menu")
self.button.clicked.connect(self.showMenu)
self.mainLayout.addWidget(self.button)
self.testWidget = testWidget()
def showMenu(self):
print(self.testWidget.menu.actions())
#self.testWidget.menu.setParent(self)
self.testWidget.menu.exec_(QtCore.QPoint(200, 200))
if __name__ == "__main__":
app = 0
app = QApplication([])
window = Window()
window.show()
app.exec_()
我尝试将菜单的父级更改为主菜单 window 但这也没有解决问题。
有人知道在另一个小部件中创建菜单的同时显示菜单的方法吗?
显示了 QMenu 但没有显示“测试”项,因此 window 非常小。 “Test”不显示,因为 QAction 被删除,因为它是一个局部变量,没有其他变量拥有所有权。有2个解决方案:
将父级传递给 QAction:
action = QAction("Test", checkable = True, parent=menu)
通过将
action
更改为self.action
,使 QAction 成为 class 的属性。