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