You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PySide2/PyQt中查询QPushButton的点击连接及参数?

查询QPushButton绑定的点击函数及参数

需求场景

拖拽框选QPushButton后,直接查询按钮绑定的点击函数及对应参数,而非执行点击操作。现有代码已实现按钮与函数的连接、框选逻辑,需替换sel.click()部分实现查询功能。

现有连接代码

def connect_ctrls(self):
    # connects the controls (buttons) to a respective function
    self.pushButton.clicked.connect(partial(self.howdy, 'herp'))
    self.pushButton_2.clicked.connect(self.later)

对应函数实现

def howdy(self, *_):
    print('Hello')
    print(_)
    
def later(self, *_):
    print('Goodbye')

修改后的框选释放事件代码

def mouseReleaseEvent(self, event):
    if event.button() == qtc.Qt.LeftButton:
        self.rubberBand.hide()
        selected = []
        rect = self.rubberBand.geometry()
        for child in self.findChildren(qtw.QPushButton):
            if rect.intersects(child.geometry()):
                selected.append(child)
        for sel in selected:
            # 遍历按钮clicked信号的所有绑定接收者
            for receiver in sel.clicked.receivers():
                # 处理functools.partial包装的带参函数
                if isinstance(receiver, partial):
                    func_name = receiver.func.__name__
                    args = receiver.args
                    kwargs = receiver.keywords or {}
                    print(f"按钮{sel.objectName()}绑定的函数: {func_name}")
                    print(f"位置参数: {args}")
                    if kwargs:
                        print(f"关键字参数: {kwargs}")
                else:
                    # 处理普通无参(或默认参数)函数
                    func_name = receiver.__name__
                    print(f"按钮{sel.objectName()}绑定的函数: {func_name}")

代码说明

  1. 获取信号接收者:通过sel.clicked.receivers()可以获取当前按钮clicked信号绑定的所有槽函数对象。
  2. 解析partial对象:如果绑定的是functools.partial包装的带参函数,可直接访问其func(原始函数)、args(位置参数)、keywords(关键字参数)属性。
  3. 普通函数处理:对于直接绑定的普通函数,直接获取函数名即可。

输出示例

针对你的代码,框选两个按钮后会输出:

按钮pushButton绑定的函数: howdy
位置参数: ('herp',)
按钮pushButton_2绑定的函数: later

内容的提问来源于stack exchange,提问作者rasonage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:45:42