【发布时间】:2019-07-08 03:35:16
【问题描述】:
我想为QLineEdit 和QCompleter 启用通配符匹配。如果字符串模型是['abc', 'cba'],当我输入ab* 或a* 时,它应该显示abc。下面是我写的代码,但它仍然表现得像一个常规匹配。知道我应该如何解决它吗?
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys, random
class MyCompleter(QCompleter):
def __init__(self, *args):
super().__init__(*args)
def setModel(self, model):
self.proxyModel = QSortFilterProxyModel()
self.proxyModel.setSourceModel(model)
super().setModel(self.proxyModel)
def updatePattern(self, patternStr):
self.proxyModel.setFilterWildcard(patternStr)
class MyMain(QMainWindow):
def __init__(self, *args):
super().__init__(*args)
self.initUI()
def initUI(self):
model = QStringListModel(['abc', 'cba'])
completer = MyCompleter()
completer.setModel(model)
searchBar = QLineEdit(self)
searchBar.setCompleter(completer)
searchBar.textChanged.connect(lambda wildcard: completer.updatePattern(wildcard))
vLayout = QVBoxLayout()
vLayout.addWidget(searchBar, alignment=Qt.AlignCenter)
self.setCentralWidget(QWidget())
self.centralWidget().setLayout(vLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
mm = MyMain()
mm.show()
sys.exit(app.exec_())
【问题讨论】: