10

メニュー項目を生成するアプリケーションがあり、特定のサブメニューの表示を設定したいと思います。

を使ってみsetVisibility(False)ましたが、うまくいきませんでした。 setVisibility()メニュー項目に対しては機能しますが、QMenusのサブメニューに対しては機能しません。

以下のコードスニペットをご覧ください。

import sys
from PyQt4 import QtGui

class Window(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.menu = QtGui.QMenu()
        self.actio1 = QtGui.QAction('One', self)
        self.actio2 = QtGui.QAction('Two', self)
        self.menu.addAction(self.actio1)
        self.menu.addAction(self.actio2)
        self.actio1.setVisible(False)
        self.submenu = QtGui.QMenu('submenu', self)
        self.submenu.addAction('sub one')
        self.submenu.addAction('sub two')
        self.menu.addMenu(self.submenu)        
        self.submenu2 = QtGui.QMenu('submenu 2', self)
        self.submenu2.addAction('sub 2 one')
        self.submenu2.addAction('sub 2 two')
        self.menu.addMenu(self.submenu2)        
        self.submenu2.setVisible(False)
        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_())

上記の例では、「One」という名前のメニュー項目を非表示にすることはできますが、「submenu2」という名前のサブメニューを非表示にすることはできません。

誰か私にアイデアを教えてもらえますか...

4

1 に答える 1

19

あなたはほとんどそれを持っていました。

これの代わりに:

self.submenu2.setVisible(False)

あなたはこれを求めている:

self.submenu2.menuAction().setVisible(False)
于 2012-12-04T12:49:16.550 に答える