python QSortFilterProxyModel

33 views Asked by At

I created a class that displays a list of values with a text field to sort these values. I want to use "QSortFilterProxyModel", but when compiling I get an error message on the "setHeaderData" function and I can't understand why. Attached is my class:

import string
from PyQt6.QtCore import QStringConverterBase, QStringEncoder
from PySide6.QtCore import (Qt, Slot, QSortFilterProxyModel, QRegularExpression)
from PyQt6.QtGui import (QStandardItem, QStandardItemModel)
from PySide6.QtWidgets import (QLabel, QLineEdit,
                               QWidget, QGroupBox, QTreeView,
                               QGridLayout, QVBoxLayout)


class vueliste(QWidget):
    def __init__(self, table):
        super().__init__()
        
        self.liste = [(1, "INDEPENDANT"), (2, "BGMP")]
        self._proxy_model = QSortFilterProxyModel()
        self._proxy_model.setDynamicSortFilter(True)

        self._proxy_group_box = QGroupBox("Liste")

        self._proxy_view = QTreeView()
        self._proxy_view.setRootIsDecorated(False)
        self._proxy_view.setAlternatingRowColors(True)
        self._proxy_view.setModel(self._proxy_model)
        self._proxy_view.setSortingEnabled(True)

        self._filter_line_edit = QLineEdit()
        self._filter_line_edit.setClearButtonEnabled(True)
        self._filter_label = QLabel("&Nom:")
        self._filter_label.setBuddy(self._filter_line_edit)

        self._filter_line_edit.textChanged.connect(self.filter_changed)

        proxy_layout = QGridLayout()
        proxy_layout.addWidget(self._proxy_view, 0, 0, 1, 3)
        proxy_layout.addWidget(self._filter_label, 1, 0)
        proxy_layout.addWidget(self._filter_line_edit, 1, 1, 1, 2)
        self._proxy_group_box.setLayout(proxy_layout)

        main_layout = QVBoxLayout()
        main_layout.addWidget(self._proxy_group_box)
        self.setLayout(main_layout)

        self.setWindowTitle("Listes des " + table)
        self.resize(500, 450)

        self._proxy_view.sortByColumn(1, Qt.AscendingOrder)
        self._filter_line_edit.setText("")

        self.create_model(liste)
        
    def set_source_model(self, model):
        self._proxy_model.setSourceModel(model)

    def add_item(model, id, nom):
        model.insertRow(0)
        model.setData(model.index(0, 0), str(id))
        model.setData(model.index(0, 1), nom)

    def create_model(self, lis):
        model = QStandardItemModel(len(lis), 2)
        model.setHeaderData(0, Qt.Orientation.Horizontal, "id")
        model.setHeaderData(1, Qt.Orientation.Horizontal, "nom")
        for row in range(0, model.rowCount()):
            itemr = lis[row]
            for column in range(0, model.columnCount()):
                item = QStandardItem(str(itemr[column]))
        model.setItem(row, column, item)        
        self._proxy_model.setSourceModel(model)

    @Slot()
    def filter_changed(self):
        pattern = self._filter_line_edit.text()
        pattern = QRegularExpression.escape(pattern)
        reg_exp = QRegularExpression(pattern)
        options = reg_exp.patternOptions()
        options |= QRegularExpression.CaseInsensitiveOption
        reg_exp.setPatternOptions(options)
        self._proxy_model.setFilterRegularExpression(reg_exp)

0

There are 0 answers