#python #pyqt #pyqt5 #qmenu
Вопрос:
Я создал QMenu в виджете за пределами моего главного окна, но когда я пытаюсь показать его в своем приложении, он просто не появляется.
Если я создам точно такой же 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_()
Я попытался изменить родительское меню на главное окно, но это тоже не решает проблему.
Кто-нибудь знает способ показать меню, все еще создавая его в другом виджете?
Ответ №1:
Отображается QMenu, но не пункт «Тест», поэтому окно очень маленькое. «Тест» не отображается, потому что QAction удаляется, поскольку это локальная переменная, и никакая другая переменная не является владельцем. Есть 2 решения:
- Передайте родителя в QAction:
action = QAction("Test", checkable = True, parent=menu)
- Сделайте QAction атрибутом класса, изменив
action
его наself.action
.