我正在尝试实现一个具有自动完成和过滤功能的QCombobox。我找到了QSortFilterProxyModel的示例,但是它的行为与我的不同:我无法添加新字符串来创建新项(如果它不在列表中)
你有什么建议吗?我应该实现自定义ProxyModel,还是不可能实现
MWE(我还想在显示窗口时添加一个默认值“”:
from PyQt5.QtWidgets import QComboBox, QMainWindow
from PyQt5 import QtCore, QtWidgets
import sys
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setFixedWidth(400)
self.cB_opc_type = QComboBox(self)
self.cB_opc_type.setEditable(True)
self.cB_opc_type.setFixedHeight(60)
self.cB_opc_type.setFixedWidth(300)
self.lst = ["Abcd", "Abka", "Dezea", "Bddqdq", "Excqq"]
self.lst.sort()
self.qlst = QtCore.QStringListModel()
self.qlst.setStringList(self.lst)
self.ProxyModel = QtCore.QSortFilterProxyModel()
self.ProxyModel.setSourceModel(self.qlst)
self.ProxyModel.setFilterCaseSensitivity(QtCore.Qt.CaseInsensitive)
self.ProxyModel.setDynamicSortFilter(True)
self.ProxyModel.setSortRole(QtCore.Qt.EditRole)
self.cB_opc_type.setModel(self.ProxyModel)
self.completer = QtWidgets.QCompleter(self.ProxyModel, self)
self.completer.setCompletionMode(QtWidgets.QCompleter.UnfilteredPopupCompletion)
self.cB_opc_type.setCompleter(self.completer)
self.cB_opc_type.editTextChanged.connect(self.maj_items)
def maj_items(self, etc):
self.ProxyModel.setFilterFixedString(etc)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec())
目前没有回答
相关问题 更多 >
编程相关推荐