【问题标题】:Qt get action clicked from submenu从子菜单中单击 Qt 获取操作
【发布时间】:2016-12-07 20:21:07
【问题描述】:

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

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

【问题讨论】:

  • QMenu.exec_() 返回激活的操作(或None)。
  • 谢谢,它确实返回了激活的动作,但它也执行了子菜单,所以即使在我右键单击子菜单出现在我的主窗口之前,有没有办法避免这种情况?
  • 我添加了一些示例代码的答案。

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


【解决方案1】:

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

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)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多