Qt получить действие, нажатое из подменю

У меня открылось меню, когда я щелкнул правой кнопкой мыши по таблице, я хотел бы получить имя действия, на которое я нажал. Дело в том, что я создаю действия в цикле. В основном каждое действие добавляет элемент, щелкнутый правой кнопкой мыши, в файл (список воспроизведения). Поэтому, чтобы добавить элемент, мне нужно знать, где.

    def menu(self, event):
        self.menu_table = QtWidgets.QMenu(self.tableWidget)
        self.submenu = QtWidgets.QMenu("Add to a playlist")
        list = os.listdir("playlists")
        for i in list:
            self.submenu.addAction(i)
        self.submenu.triggered.connect(MyFunction(ItemClicked))
        self.menu_table.addMenu(self.submenu)
        self.menu_table.exec_(self.tableWidget.mapToGlobal(event))

person Hedowas    schedule 07.12.2016    source источник
comment
QMenu.exec_() возвращает активированное действие (или None).   -  person ekhumoro    schedule 08.12.2016
comment
Спасибо, он возвращает активированное действие, но также выполняет подменю, поэтому даже до того, как я щелкну правой кнопкой мыши, подменю появится в моем главном окне, есть ли способ избежать этого?   -  person Hedowas    schedule 09.12.2016
comment
Я добавил ответ с некоторым примером кода.   -  person ekhumoro    schedule 09.12.2016


Ответы (2)


Ваш обработчик контекстного меню должен выглядеть так:

def menu(self, pos):
    menu = QtWidgets.QMenu()
    submenu = menu.addMenu("Add to a playlist")
    for filename in os.listdir("playlists"):
        submenu.addAction(filename)
    action = menu.exec_(self.mapToGlobal(pos))
    if action is not None:
        print(action.text())
        MyFunction(action)
person ekhumoro    schedule 09.12.2016

Как уже упоминалось, вызов меню exec возвращает выбранное действие. Вероятно, вам будет проще всего использовать QAction.setData для хранения необходимой информации в каждом действии. Это QVariant, так что вы можете хранить практически все. Затем, в результате вызова «exec», вы используете QAction.data выбранного действия, чтобы вернуть значение. (Извините, если мой синтаксис неверен... Я плохо знаю Python.)

person goug    schedule 07.12.2016