Costum QSortFilterProxyModel

时间:2018-11-30 22:04:17

标签: python python-3.x pyqt5 qtableview qsortfilterproxymodel

你好python社区

我试图根据来自QLineEdid的文本在QTableView上应用QStandardItemModel,当然我已经找到了文档,并且在拉丁字母上也很有效,但是在某些情况下,数据是阿拉伯语的。 假设d是我表中的数据,t是编辑行中的文本,我必须在d和t上都应用一个函数,然后再将它们与RegExp(来自PyArabic的函数)进行比较,我不知道该怎么做。 / p>

我希望在这里找到帮助

谢谢!

这是我的代码

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_())

0 个答案:

没有答案