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 (Python):通过 contextmenu 从 qpushbutton 获取值
Pyqt5:如何限制QMainWindow中QPushButton的拖动区域?