Costum QSortFilterProxyModel - PullRequest
       16

Costum QSortFilterProxyModel

0 голосов
/ 01 декабря 2018

Hello python community

Я пытаюсь применить QStandardItemModel к QTableView в соответствии с текстом из QLineEdid, конечно, я нашел документацию, и она отлично работает на латинских буквах, но в некоторых случаях,данные арабские.пусть d будет данными из моей таблицы, а t - текст из строки редактирования, я должен применить функцию к обоим d и t, прежде чем сравнивать их с RegExp (функцией из PyArabic), и я не знаю, как это сделать.

Я надеюсь найти помощь здесь

Спасибо !!

вот мой код

import sys
from PyQt5.QtCore import Qt, QSortFilterProxyModel, QRegExp
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QWidget, QLineEdit, QTableView, QVBoxLayout, QApplication
from pyarabic.araby import strip_tashkeel


class MyWindow(QWidget):
    def __init__(self):
        super(QWidget, self).__init__()

        word_edit = QLineEdit()
        word_edit.setLayoutDirection(Qt.RightToLeft)
        word_edit.textChanged.connect(self.word_edit_text_changed)

        model = QStandardItemModel()
        model.setHorizontalHeaderLabels(['الكلمة', 'الطبيعة', 'الحالة'])
        model.appendRow([QStandardItem('ذَهبَ'), QStandardItem('فعل'), QStandardItem('غير مراقب')])
        model.appendRow([QStandardItem('ذُهبٌ'), QStandardItem('اسم'), QStandardItem('مراقب')])
        model.appendRow([QStandardItem('مَذهب'), QStandardItem('اسم'), QStandardItem('مراقب')])

        self.filter = QSortFilterProxyModel()
        self.filter.setSourceModel(model)
        self.filter.setFilterKeyColumn(0)

        words_table = QTableView()
        words_table.setLayoutDirection(Qt.RightToLeft)
        words_table.setModel(self.filter)

        v_layout = QVBoxLayout()
        v_layout.addWidget(word_edit)
        v_layout.addWidget(words_table)

        self.setLayout(v_layout)

    def word_edit_text_changed(self, text):
        # let d be an the date from the model
        # i need to compare strip_tashkeel(text) to strip_tashkeel(d)
        search = QRegExp(strip_tashkeel(text), Qt.CaseInsensitive)
        self.filter.setFilterRegExp(search)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWindow()
    w.show()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...