QT在QTreeWidget中设置节点击鼠标左键单选中时改变其颜色,同时在未选中中时恢复其颜色,请给我完整代码
时间: 2023-12-09 21:05:36 浏览: 58
以下是一个基本的示例代码,它演示了如何在QTreeWidget中设置节点击鼠标左键单选中时改变其颜色,同时在未选中中时恢复其颜色:
```python
from PyQt5.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem
from PyQt5.QtGui import QColor
class MyTreeWidget(QTreeWidget):
def __init__(self):
super().__init__()
self.setColumnCount(1)
self.setHeaderLabel("Items")
# 添加一些测试节点
for i in range(3):
parent = QTreeWidgetItem(self, ["Parent {}".format(i)])
for j in range(4):
child = QTreeWidgetItem(parent, ["Child {}".format(j)])
# 设置默认颜色
self.default_color = self.palette().color(self.backgroundRole())
# 连接节单击事件
self.itemClicked.connect(self.on_item_clicked)
def on_item_clicked(self, item, column):
# 重置所有节点的颜色
for i in range(self.topLevelItemCount()):
top_level_item = self.topLevelItem(i)
self.set_item_color(top_level_item, self.default_color)
for j in range(top_level_item.childCount()):
child_item = top_level_item.child(j)
self.set_item_color(child_item, self.default_color)
# 设置选定节点的颜色
selected_color = QColor(255, 0, 0)
self.set_item_color(item, selected_color)
def set_item_color(self, item, color):
for i in range(self.columnCount()):
item.setBackground(i, color)
if __name__ == '__main__':
app = QApplication([])
tree_widget = MyTreeWidget()
tree_widget.show()
app.exec_()
```
在这个例子中,我们创建了一个继承自QTreeWidget的新类MyTreeWidget。在__init__方法中,我们设置了一个包含一些测试节点的QTreeWidget。我们还保存了默认颜色,以便稍后可以轻松地将所有节点恢复为其原始颜色。
我们通过连接itemClicked信号来响应节点的单击事件。在on_item_clicked方法中,我们首先遍历所有节点,并将它们的颜色重置为默认颜色。然后,我们将选定的节点的颜色设置为红色。
最后,我们定义了一个set_item_color方法,该方法接受一个QTreeWidgetItem和一种颜色,并将该颜色设置为该节点的背景色。
阅读全文