QT在QTreeWidget中设置节点击鼠标左键单选中时修改其颜色,请给我完整代码
时间: 2024-02-05 19:12:23 浏览: 60
使用QT编写的可以更改颜色的等待框
好的,以下是在QTreeWidget中设置节点击鼠标左键单选中时修改其颜色的完整代码:
``` python
from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeWidget, QTreeWidgetItem
from PyQt5.QtGui import QColor
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.tree_widget = QTreeWidget(self)
self.setCentralWidget(self.tree_widget)
# 添加根节点
root = QTreeWidgetItem(self.tree_widget)
root.setText(0, "Root")
# 添加子节点
child1 = QTreeWidgetItem(root)
child1.setText(0, "Child 1")
child2 = QTreeWidgetItem(root)
child2.setText(0, "Child 2")
# 设置根节点和子节点的背景颜色
self.tree_widget.setStyleSheet("""
QTreeView::item:hover { background-color: rgb(220, 220, 220); }
QTreeView::item:selected { background-color: rgb(180, 180, 180); }
""")
# 为树节点添加单击事件
self.tree_widget.itemClicked.connect(self.handle_item_clicked)
def handle_item_clicked(self, item):
# 取消选中其他节点
for i in range(self.tree_widget.topLevelItemCount()):
top_item = self.tree_widget.topLevelItem(i)
if top_item is not item.parent():
top_item.setSelected(False)
for j in range(top_item.childCount()):
child_item = top_item.child(j)
if child_item is not item:
child_item.setSelected(False)
# 设置选中节点的背景颜色
item.setBackground(0, QColor(0, 255, 0))
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
这段代码中,我们创建了一个QTreeWidget并向其中添加了根节点和两个子节点。我们使用setStyleSheet()方法为根节点和子节点设置了鼠标悬停和选中时的背景颜色。并且我们为树节点添加了单击事件,当节点被单击时,我们取消选中其他节点并将选中节点的背景颜色设置为绿色。
阅读全文