PyQt5:可以通过QPushButton触发QAction函数

问题描述

我创建了一个右键单击菜单功能,其中所有右键单击功能链接到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)

但是什么也没发生。

有人可以帮忙吗?谢谢。

解决方法

虽然使用QMenu.exec_()返回的操作对于“即时”创建的菜单效果很好,但是QAction的一般(也是首选)用法是在{{ 1}}信号发出。

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

在下面的示例中,从菜单中激活triggered()函数并单击 someOtherButton 时,都会调用该函数。

addData()