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

PyQt5: Can QAction function be triggered via QPushButton

我创建了一个右键单击菜单功能,其中所有右键单击功能都链接到一个 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 的一般(和首选)用法是 做某事 当他们发出 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