【发布时间】:2021-10-12 07:41:49
【问题描述】:
PySide 文档在 QCompleter with tree models 上包含此部分:
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.QCompleter.splitPath() 的默认实现,如果模型是 PySide.QtGui.QFileSystemModel ,则使用 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()
【问题讨论】:
-
也许这个来自 Qt 文档的example 有帮助。
-
我已经找到了,但我真的对如何制作树模型感到困惑。
标签: qt pyside qabstractitemmodel qcompleter