Qt从子菜单中点击动作

时间:2016-12-07 20:21:07

标签: python qt python-3.x qt5 pyqt5

当我右键点击桌子时,我打开了一个菜单,我想获得我点击的动作名称。问题是我在循环中创建动作。基本上每个动作都将右键单击的项添加到文件(播放列表)。所以为了添加项目我需要知道在哪里。

    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))

2 个答案:

答案 0 :(得分:3)

您的上下文菜单处理程序应如下所示:

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)

答案 1 :(得分:0)

如上所述,菜单的exec调用返回所选操作。最简单的方法是使用QAction.setData将所需信息存储到每个操作中。这是一个QVariant,所以你几乎可以存储任何东西。然后,在“exec”调用的结果中,您使用所选操作的QAction.data来取回值。 (对不起,如果我的语法不正确......我不太了解Python。)