PyQt5:可以通过 QPushButton 触发 QAction 功能吗

Posted

技术标签:

【中文标题】PyQt5:可以通过 QPushButton 触发 QAction 功能吗【英文标题】:PyQt5: Can QAction function be triggered via QPushButton 【发布时间】: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() 信号没有连接。 【参考方案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

【讨论】:

以上是关于PyQt5:可以通过 QPushButton 触发 QAction 功能吗的主要内容,如果未能解决你的问题,请参考以下文章

Pyqt5_QPushButton

PyQt5 (Python):通过 contextmenu 从 qpushbutton 获取值

Pyqt5:如何限制QMainWindow中QPushButton的拖动区域?

如何在 PyQt5 中制作自定义 QPushButton?

《PyQT5软件开发 - 控件篇》第1章 按钮-1(QPushButton)

Pyqt5 Python3 QPushButton 默认 StrongFocus 颜色或选项卡选择颜色