zhiyiYo / PyQt-Fluent-Widgets

A fluent design widgets library based on C++ Qt/PyQt/PySide. Make Qt Great Again.
https://qfluentwidgets.com
GNU General Public License v3.0
5.61k stars 541 forks source link

检索TreeWidget,符合查询条件的QTreeWidgetItem 通过setForeground方法无法设置字体颜色 #385

Closed keymou closed 1 year ago

keymou commented 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_()
zhiyiYo commented 1 year ago

应该是我之前设置了样式表导致的,注释掉 tree_view.qsscolor: black,重新编译 qrc 文件就能解决

keymou commented 1 year ago

应该是我之前设置了样式表导致的,注释掉 tree_view.qsscolor: black,重新编译 qrc 文件就能解决

可以了,学习了,感谢!