PySide 文档在QCompleter 中包含此部分和树模型:
PySide.QtGui.QCompleter 可以在树模型中查找完成,假设任何项目(或子项目或子子项目)可以通过指定项目的路径明确表示为字符串。然后一次完成一个级别。
让我们以用户键入文件系统路径为例。该模型是(分层) PySide.QtGui.QFileSystemModel 。路径中的每个元素都会完成。例如,如果当前文本是 C:\Wind ,则 PySide.QtGui.QCompleter 可能会建议 Windows 完成当前路径元素。同样,如果当前文本是 C:\Windows\Sy , PySide.QtGui.QCompleter 可能会建议 System 。
为了使这种补全工作,PySide.QtGui.QCompleter 需要能够将路径拆分为在每个级别匹配的字符串列表。对于 C:\Windows\Sy ,需要拆分为“C:”、“Windows”和“Sy”。如果模型是 PySide.QtGui.QFileSystemModel ,则 PySide.QtGui.QCompleter.splitPath() 的默认实现使用 QDir.separator() 拆分 PySide.QtGui.QCompleter.completionPrefix() 。
为了提供完成,PySide.QtGui.QCompleter 需要知道索引的路径。这是由 PySide.QtGui.QCompleter.pathFromIndex() 提供的。PySide.QtGui.QCompleter.pathFromIndex() 的默认实现,返回列表模型的编辑角色的数据,如果模式是 PySide.QtGui.QFileSystemModel,则返回绝对文件路径。
但我似乎找不到一个例子来说明如何做到这一点。谁能指出我可以用作起点的示例?(在我的调查中,看起来困难的部分可能是树模型而不是 QCompleter)
看起来您需要提供以下功能:
- 将字符串拆分为段的能力(对于给出的示例
C:\Windows\Sy
,['C:','Windows','Sy']
- 能够指定包含最后一段的项目列表(例如,包含在
['C:','Windows']
我找到了 QCompleter 基本功能的示例,并且能够很好地调整基本功能(见下文),我只是不知道如何实现树模型类型的应用程序。
'''based on
http://codeprogress.com/python/libraries/pyqt/showPyQTExample.php?index=403&key=QCompleterQLineEdit'''
from PySide.QtGui import *
from PySide.QtCore import *
import sys
def main():
app = QApplication(sys.argv)
edit = QLineEdit()
strList = '''
Germany;Russia;France;
french fries;frizzy hair;fennel;fuzzball
frayed;fickle;Frobozz;fear;framing;frames
Franco-American;Frames;fancy;fire;frozen yogurt
football;fnord;foul;fowl;foo;bar;baz;quux
family;Fozzie Bear;flinch;fizzy;famous;fellow
friend;fog;foil;far;flower;flour;Florida
'''.replace('\n',';').split(";")
strList.sort(key=lambda s: s.lower())
completer = QCompleter(strList,edit)
completer.setCaseSensitivity(Qt.CaseInsensitive)
edit.setWindowTitle("PySide QLineEdit Auto Complete")
edit.setCompleter(completer)
edit.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()