Python 从多列(其中一列)开始自动完成

Python 从多列(其中一列)开始自动完成,python,autocomplete,pyside2,qlineedit,qcompleter,Python,Autocomplete,Pyside2,Qlineedit,Qcompleter,我有多个列的数据,比如名字/姓氏或邮政编码/地名,现在我想有一个类似qcompleter的东西,它只匹配每一列的开头 这意味着输入a将显示建议,如Andrea Miller或John Adams,但不会显示Jane Doe或Tom Masters 如何实现此功能的任何提示?一种解决方法是禁用QCompleter筛选,并使用QSortFilterProxyModel进行自定义筛选: 导入系统 从PySide2导入QtCore、QtWidgets 类FilterModelQtCore.QSortFi

我有多个列的数据,比如名字/姓氏或邮政编码/地名,现在我想有一个类似qcompleter的东西,它只匹配每一列的开头

这意味着输入a将显示建议,如Andrea Miller或John Adams,但不会显示Jane Doe或Tom Masters


如何实现此功能的任何提示?

一种解决方法是禁用QCompleter筛选,并使用QSortFilterProxyModel进行自定义筛选:

导入系统 从PySide2导入QtCore、QtWidgets 类FilterModelQtCore.QSortFilterProxyModel: def u_init__self,父项=无: 超级。初始父级 self.\u前缀= @财产 def prefixself: 返回self.\u前缀 @前缀设置器 def prefixself,前缀: self.\u prefix=prefix.lower 自动失效过滤器 def过滤器AcceptsRowself、源行、源父级: 如果不是self.prefix: 返回真值 文本= 自源模型 .indexsourceRow、self.filterKeyColumn、sourceParent 数据 对于text.split中的word: 如果word.lower.startswithself.prefix: 返回真值 返回错误 类CompleterQtWidgets.QCompleter: def setModelself,型号: 代理\内部\模型=FilterModelself proxy_internal_model.SetSourceModel模型 model.setParentproxy\u内部\u模型 super.setModelproxy\u内部\u模型 def splitPathself,路径: 如果isinstanceself.model,则FilterModel: self.model.prefix=路径 返回[] 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: app=qtwidts.QApplicationsys.argv w=QtWidgets.QLineEdit 文本=[Andrea Miller、John Adams、Jane Doe、Tom Masters] completer=Completerw completer.setModelQtCore.QStringListModeltexts,w w、 setCompletercompleter w、 展示 sys.exitapp.exec_
解决方法是禁用QCompleter筛选,并使用QSortFilterProxyModel进行自定义筛选:

导入系统 从PySide2导入QtCore、QtWidgets 类FilterModelQtCore.QSortFilterProxyModel: def u_init__self,父项=无: 超级。初始父级 self.\u前缀= @财产 def prefixself: 返回self.\u前缀 @前缀设置器 def prefixself,前缀: self.\u prefix=prefix.lower 自动失效过滤器 def过滤器AcceptsRowself、源行、源父级: 如果不是self.prefix: 返回真值 文本= 自源模型 .indexsourceRow、self.filterKeyColumn、sourceParent 数据 对于text.split中的word: 如果word.lower.startswithself.prefix: 返回真值 返回错误 类CompleterQtWidgets.QCompleter: def setModelself,型号: 代理\内部\模型=FilterModelself proxy_internal_model.SetSourceModel模型 model.setParentproxy\u内部\u模型 super.setModelproxy\u内部\u模型 def splitPathself,路径: 如果isinstanceself.model,则FilterModel: self.model.prefix=路径 返回[] 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: app=qtwidts.QApplicationsys.argv w=QtWidgets.QLineEdit 文本=[Andrea Miller、John Adams、Jane Doe、Tom Masters] completer=Completerw completer.setModelQtCore.QStringListModeltexts,w w、 setCompletercompleter w、 展示 sys.exitapp.exec_
您应该能够通过将filterMode设置为Qt::MatchStartWith来实现这一点:当您说多列时,您的意思是一个字符串有几个单词吗?您应该能够通过将filterMode设置为Qt::MatchStartWith来实现这一点:当您说多列时,您的意思是一个字符串有几个单词吗?