可检查的QMenu,而不是菜单项

时间:2019-01-31 00:38:06

标签: python pyqt qmenu

我有一个QMenu,其工作方式如下:

class Example(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Example, self).__init__(parent)
        self.initUI()

    def initUI(self):         
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Context menu')    

        self.qmenu = QtGui.QMenu()
        add_item_action = QtGui.QAction('Add new item', self,
            triggered=self.add_new_item)
        self.qmenu.addAction(add_item_action)
        self.qmenu.addSeparator()

    def contextMenuEvent(self, event):
        action = self.qmenu.exec_(self.mapToGlobal(event.pos()))

    def add_new_item(self):
        new_menu_name, ok = QtGui.QInputDialog.getText(
            self,
            "name of menu",
            "Name of new menu : "
        )
        if ok:
            base_qmenu = QtGui.QMenu(new_menu_name, self)
            add_item_action = QtGui.QAction('Add Sub Item', base_qmenu)
            slot = partial(self._addSubMenuItem, base_qmenu)
            add_item_action.triggered.connect(slot)
            base_qmenu.addAction(add_item_action)
            base_qmenu.addSeparator()
            self.qmenu.insertMenu(base_qmenu)

    def _addSubMenuItem(self, menu):
        new_submenu_name, ok = QtGui.QInputDialog.getText(
            self,
            'Sub Menu',
            'Name of new Sub-Menu Item:'
        )

        if ok:
            action = QtGui.QAction(new_submenu_name, self)
            action.setCheckable(True)
            action.setChecked(True)
            menu.addAction(action)

虽然我能够使主菜单和子菜单项正常工作,但我也想使主菜单项成为可检查的。

例如:

  • 添加新菜单:mainItemA(此菜单应处于选中状态)
  • mainItemA中添加新的子菜单

这个想法是,在我的工具中,我想让主菜单项一次性切换其子菜单项的检查状态。 而不是创建另一个或两个其他选项来切换子项目的状态。

0 个答案:

没有答案