Closed keymou closed 1 year ago
Describe the bug 检索TreeWidget,希望符合条件的QTreeWidgetItem 通过setForeground方法设置高亮,使用QTreeWidget可以设置成功; TreeWidget 中使用setForeground方法不生效。
Environment 环境信息
from PyQt5.QtGui import QColor, QBrush from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem, QWidget, QVBoxLayout, QLineEdit, QPushButton, QHBoxLayout from qfluentwidgets import TreeWidget import sys class Tree(QTreeWidget): def __init__(self): super().__init__() self.setColumnCount(1) self.setHeaderHidden(True) root = QTreeWidgetItem(self) root.setText(0, "Root") child1 = QTreeWidgetItem(root) child1.setText(0, "Child 1") child2 = QTreeWidgetItem(root) child2.setText(0, "Child 2") child3 = QTreeWidgetItem(root) child3.setText(0, "Child 3") # 将根节点展开 self.expandItem(root) class Frame(QWidget): def __init__(self, parent=None): super().__init__(parent=parent) self.vBoxLayout = QVBoxLayout(self) self.hBoxLayout = QHBoxLayout() self.lineEdit = QLineEdit() self.search_btn = QPushButton() self.tree = Tree() self._init_widget() def _init_widget(self): self.vBoxLayout.setObjectName("vBoxLayout") self.hBoxLayout.setObjectName("hBoxLayout") self.lineEdit.setObjectName("lineEdit") self.search_btn.setObjectName("search_btn") self.tree.setObjectName("tree") self.search_btn.setText("搜索") self.hBoxLayout.addWidget(self.lineEdit) self.hBoxLayout.addWidget(self.search_btn) self.vBoxLayout.addLayout(self.hBoxLayout) self.vBoxLayout.addWidget(self.tree) self.search_btn.clicked.connect(self.search) def search(self): if search_text := self.lineEdit.text(): items = self.tree.findItems(search_text, Qt.MatchContains | Qt.MatchRecursive | Qt.MatchCaseSensitive, 0) for item in items: print(type(item)) brush = QBrush(QColor(173, 216, 230)) item.setForeground(0, brush) if __name__ == '__main__': app = QApplication([]) window = Frame() window.show() app.exec_()
应该是我之前设置了样式表导致的,注释掉 tree_view.qss 的 color: black,重新编译 qrc 文件就能解决
tree_view.qss
color: black
可以了,学习了,感谢!
Describe the bug 检索TreeWidget,希望符合条件的QTreeWidgetItem 通过setForeground方法设置高亮,使用QTreeWidget可以设置成功; TreeWidget 中使用setForeground方法不生效。
Environment 环境信息