如何获取QTreeWidget中QTreeWidgetItem上被点击的按钮对象并修改其文本
QTreeWidget点击按钮获取对象解决方案
你之前绑定的itemClicked是整行点击触发的信号,无法直接拿到按钮对象,推荐以下两种实现方式:
方案1:用Qt内置sender()方法获取触发信号的对象
无需额外传参,直接在槽函数中获取点击的按钮实例,适合只需要操作按钮本身的场景:
- 循环创建按钮时,绑定clicked信号:
button = QPushButton() button.setText("Start") button.setStyleSheet(buttonst) self.treeWidget.setItemWidget(item, 5, button) # 取消注释,绑定信号 button.clicked.connect(self.getValue)
- 改写槽函数:
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作为参数传入槽函数:
- 绑定时传参:
button.clicked.connect(lambda checked, btn=button, item=item: self.getValue(btn, item))
- 改写槽函数:
def getValue(self, clicked_button, current_item): # 直接修改按钮文本 clicked_button.setText("Running") # 可同步修改同一行的其他字段,比如状态列 current_item.setText(3, "Running")
内容的提问来源于stack exchange,提问作者Some one
相关产品推荐
相关产品推荐

