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

如何获取QTreeWidget中QTreeWidgetItem上被点击的按钮对象并修改其文本

QTreeWidget点击按钮获取对象解决方案

你之前绑定的itemClicked是整行点击触发的信号,无法直接拿到按钮对象,推荐以下两种实现方式:

方案1:用Qt内置sender()方法获取触发信号的对象

无需额外传参,直接在槽函数中获取点击的按钮实例,适合只需要操作按钮本身的场景:

  1. 循环创建按钮时,绑定clicked信号:
button = QPushButton()
button.setText("Start")
button.setStyleSheet(buttonst)
self.treeWidget.setItemWidget(item, 5, button)
# 取消注释,绑定信号
button.clicked.connect(self.getValue)
  1. 改写槽函数:
def getValue(self):
    # self.sender()返回触发当前槽函数的信号发送对象
    clicked_button = self.sender()
    # 类型判断避免异常
    if not isinstance(clicked_button, QPushButton):
        return
    # 按需修改按钮文本
    if clicked_button.text() == "Start":
        clicked_button.setText("Stop")
    else:
        clicked_button.setText("Start")

方案2:用lambda传递参数(支持同时获取对应行的item)

如果需要同时操作按钮所在行的其他内容,用lambda将按钮和对应item作为参数传入槽函数:

  1. 绑定时传参:
button.clicked.connect(lambda checked, btn=button, item=item: self.getValue(btn, item))
  1. 改写槽函数:
def getValue(self, clicked_button, current_item):
    # 直接修改按钮文本
    clicked_button.setText("Running")
    # 可同步修改同一行的其他字段,比如状态列
    current_item.setText(3, "Running")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:27:02