繁体   English   中英

Qt / PyQt:如何使用QMenu作为永久小部件?

[英]Qt/PyQt: How do I use a QMenu as a permanent widget?

我想将QMenu用作gui中的永久小部件。 (我喜欢它的外观和布局,并且一经将鼠标悬停在上面,便会弹出所需菜单,无需单击即可。使用自定义小部件来模仿它会很麻烦。)尝试将其添加到父窗口小部件的布局中,但是在第一次使用后,它消失了。 我将如何将其保留在那里?

我在QMenu中找不到任何禁用自动隐藏的选项,因此最简单的方法是重写hideEvent的子类。 hideEventhide()完成之前被触发。 这意味着您不能拦截/忽略hide()但是可以重新显示它:

class PermanentMenu(QtGui.QMenu):
    def hideEvent(self, event):
        self.show()

只需从PermanentMenu制作顶层菜单,就可以了。

一个使用它的简单示例:

import sys
from PyQt4 import QtGui

class PermanentMenu(QtGui.QMenu):
    def hideEvent(self, event):
        self.show()


class Window(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.menu = PermanentMenu()

        self.menu.addAction('one')
        self.menu.addAction('two')

        self.submenu = self.menu.addMenu('submenu')
        self.submenu.addAction('sub one')
        self.submenu.addAction('sub two')

        self.submenu2 = self.menu.addMenu('submenu 2')
        self.submenu2.addAction('sub 2 one')
        self.submenu2.addAction('sub 2 two')

        layout = QtGui.QHBoxLayout()
        layout.addWidget(self.menu)
        self.setLayout(layout)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    w = Window()
    w.show()

    sys.exit(app.exec_())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM