Проверяемый QMenu, а не пункты меню - PullRequest
0 голосов
/ 31 января 2019

У меня есть 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

Идея состояла в том, что в моем инструменте я бы хотел, чтобы пункт главного меню переключал контрольные состояния своих пунктов подменю, все сразу.Вместо создания еще одного или двух дополнительных параметров, которые переключают состояния подэлементов.

...