1

QMenu を GUI の永続的なウィジェットとして使用したいと思います。(私はその外観とレイアウトが気に入っています。また、カーソルを合わせるとすぐに必要なメニューがポップアップし、クリックする必要がないという事実が気に入っています。カスタム ウィジェットでそれをエミュレートしようとするのは首の痛みです。)親ウィジェットのレイアウトに追加しようとしましたが、初めて使用した後に消えます。どうすればそれをそこに保つことができますか?

4

1 に答える 1

1

QMenu自動非表示を無効にするオプションが見つからないため、最も簡単な方法は、オーバーライドするサブクラスですhideEventhideEvent完了する直前に起動されhide()ます。つまり、傍受/無視することはできません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_())
于 2012-09-23T03:10:26.547 に答える