如何在 QMenu 中隐藏子菜单
Posted
技术标签:
【中文标题】如何在 QMenu 中隐藏子菜单【英文标题】:How do I hide a sub-menu in QMenu 【发布时间】:2012-11-22 02:13:21 【问题描述】:我有一个生成菜单项的应用程序,我想设置特定子菜单的可见性。
我尝试使用setVisibility(False)
,但这不起作用。
setVisibility()
适用于菜单项,但不适用于 QMenus 中的子菜单。
看看下面的代码sn-p:
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”的子菜单
谁能给我一个想法...
【问题讨论】:
【参考方案1】:你几乎拥有它;
而不是这个:
self.submenu2.setVisible(False)
你想要这个:
self.submenu2.menuAction().setVisible(False)
【讨论】:
@PBLNarasimhaRao 别提了 这在 C++ QT 中也很有效:MySubMenu->menuAction()->setVisible(true);谷歌热门热门说它无法完成,所以我想我会在这里分享这个。无需删除子菜单并重新添加它们,这可能会导致 osx 崩溃。 @Marcus10110 - 是的,在 PyQt/PySide 和 Qt 之间交换.
s 和 ->
s 几乎无处不在。
我在 OS X 上,我的菜单会自动移动到系统的菜单栏。我试图隐藏子菜单或将其标记为禁用;我尝试了MySubMenu->menuAction()->setEnabled(false);
、MySubMenu->menuAction()->setVisible(false);
、MySubMenu->menuAction()->hide();
甚至MySubMenu->menuAction()->clear();
,但这些都没有对子菜单的外观造成任何改变。唯一有效的是MyMenu->removeAction(MySubMenu->menuAction());
。希望这可以节省其他人一些时间和挫败感:)以上是关于如何在 QMenu 中隐藏子菜单的主要内容,如果未能解决你的问题,请参考以下文章
子 QMenu 中的 QPushButton,悬停时更改背景