我有一个应用程序,其中我生成菜单项,并且我想设置特定子菜单的可见性。
我尝试使用 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”的菜单项,但无法隐藏名为“submenu 2”的子菜单。
有人能给我一个想法吗...
MySubMenu->menuAction()->setEnabled(false);
、MySubMenu->menuAction()->setVisible(false);
、MySubMenu->menuAction()->hide();
甚至是MySubMenu->menuAction()->clear();
,但这些都没有改变子菜单的外观。唯一有效的方法是MyMenu->removeAction(MySubMenu->menuAction());
。希望这能为其他人节省时间和挫折 :) - waldyrious