在工具中将所有QAction项启用为False?

时间:2015-11-12 20:30:08

标签: python pyside

在pyside中是否有办法设置所有QAction项目,无论它们在启用工具中的哪个位置= False?

例如说我在我的代码中写了这个......

# context menu
        self.edit_menu_factions = QtGui.QMenu()
        self.renameFaction = self.edit_menu_factions.addAction('Rename')
        self.renameFaction.triggered.connect(self.menu_action)
        self.removeFaction = self.edit_menu_factions.addAction('Remove')
        self.removeFaction.triggered.connect(self.menu_action)
        self.edit_menu_factions.addSeparator()
        self.copyFactionNodes = self.edit_menu_factions.addAction('Copy Nodes')
        self.copyFactionNodes.triggered.connect(self.menu_action)
        self.pasteFactionNodes = self.edit_menu_factions.addAction('Paste Nodes')
        self.pasteFactionNodes.triggered.connect(self.menu_action)
        self.edit_menu_factions.addSeparator()
        self.removeAllNodes = self.edit_menu_factions.addAction('Remove All Nodes')
        self.removeAllNodes.triggered.connect(self.menu_action)

        # sub-menu
        self.sub_menu_factions = QtGui.QMenu()
        self.nice = self.sub_menu_factions.addAction('Nice')
        self.nice.triggered.connect(self.menu_action)


        self.sub_menu_factions.setTitle("Great")
        self.edit_menu_factions.addMenu(self.sub_menu_factions)

我想通过并禁用所有操作,但主要是QMenu。

1 个答案:

答案 0 :(得分:1)

您可以使用actions()方法获取附加到菜单的操作列表。您可以迭代此列表并逐个禁用它们。

for action in menu.actions():
    action.setDisabled(True)

编辑:此函数将递归禁用菜单项,但它将跳过子菜单,以便用户可以悬停并查看它们:

def disableMenu(menu):
    for action in menu.actions():
        if action.menu():
            disableMenu(action.menu())
        else:
            action.setDisabled(True)

您可以在特定菜单上调用此功能,或menuBar()禁用所有菜单;

disableMenu(mainWindow.menuBar())