【问题标题】:PyQt5: Can QAction function be triggered via QPushButtonPyQt5:可以通过 QPushButton 触发 QAction 功能吗
【发布时间】:2020-10-16 11:56:58
【问题描述】:

我创建了一个右键菜单功能,其中所有的右键菜单功能都链接到一个 QAction

例如:

self.contextMenu = QtWidgets.QMenu(self)
self.contextMenu.addAction(self.actionAdd_Data)
self.pushButton.customContextMenuRequested.connect(self.initContextMenu)

def initContextMenu(self, event):
    action = self.contextMenu.exec_(self.pushButton.mapToGlobal(event))
    if action == self.actionAdd_Data:
        print("Do something")

是否可以模拟单击右键单击按钮?类似于 pushButton.click() 但用于 QAction 的东西。

我试过了

self.pushButton2.clicked.connect(self.actionAdd_Data.trigger)

但是什么也没发生。

有人可以帮忙吗?谢谢。

【问题讨论】:

  • 该操作的trigger() 信号是否以任何方式连接,或者您只是将其添加到菜单中?
  • @musicamante 我不太明白,但我认为 trigger() 信号没有连接。

标签: python-3.x pyqt5 contextmenu qpushbutton qaction


【解决方案1】:

虽然使用来自QMenu.exec_() 的返回操作适用于“动态”创建的菜单,但 QAction 的一般(和首选)用法是做某事当他们的triggered() 信号被发射。

这允许保留一个始终执行创建它的任务的单个 QAction,同时能够在任何需要的地方添加该操作(可以是菜单、工具栏,甚至是键盘快捷键),而无需不断检查是否那个动作已经被触发了。

在以下示例中,addData() 函数在从菜单中激活时以及在单击 someOtherButton 时都会被调用。

        self.actionAdd_Data = QAction('Add data', self)
        self.actionAdd_Data.triggered.connect(self.addData)
        self.contextMenu.addAction(self.actionAdd_Data)
        # ...
        self.someOtherButton.clicked.connect(self.actionAdd_Data.trigger)


    def initContextMenu(self, pos):
        self.contextMenu.exec_(self.pushButton.mapToGlobal(pos))

    def addData(self):
        # do something

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2021-11-22
    • 2022-11-01
    相关资源
    最近更新 更多