微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在我的主窗口之外的小部件中创建的 QMenu 没有出现

如何解决在我的主窗口之外的小部件中创建的 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_()

我尝试将菜单的父级更改为主窗口,但这也不能解决问题。

有人知道在另一个小部件中创建菜单的同时显示菜单方法吗?

解决方法

显示了 QMenu 但没有显示项目“测试”,因此窗口非常小。 “Test”未显示,因为 QAction 已被删除,因为它是一个局部变量并且没有其他变量拥有所有权。有两种解决方案:

  • 将父级传递给 QAction:action = QAction("Test",checkable = True,parent=menu)

  • 通过将 action 更改为 self.action 使 QAction 成为类的属性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。