【发布时间】:2021-11-20 00:09:42
【问题描述】:
我正在使用 QCompleter 在 QLineEdit 小部件上实现自动完成:
from PySide2 import QtGui
from PySide2.QtCore import Qt
from PySide2.QtGui import QStandardItem
from PySide2.QtWidgets import QCompleter, QWidget, QLineEdit, QFormLayout, QApplication
class SuggestionPlaceModel(QtGui.QStandardItemModel):
def __init__(self, parent=None):
super(SuggestionPlaceModel, self).__init__(parent)
def search(self, text):
self.clear()
data = [{'text': f"{text} {i}"} for i in range(10)]
for i, row in enumerate(data):
item = QStandardItem(row['text'])
self.appendRow(item)
class Completer(QCompleter):
def splitPath(self, path):
self.model().search(path)
return super(Completer, self).splitPath(path)
class Widget(QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self._model = SuggestionPlaceModel(self)
completer = Completer(self)
completer.setCaseSensitivity(Qt.CaseInsensitive)
completer.setModel(self._model)
lineedit = QLineEdit()
lineedit.setCompleter(completer)
lay = QFormLayout(self)
lay.addRow("Location: ", lineedit)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
这是一个结果:
问题:如何自定义SuggestionPlaceModel 类,以便搜索结果可以包括图标、水平分隔符、不同的字体、不同的字体大小等?
【问题讨论】:
-
可以使用
setIcon()为 QStandardItemModel 设置每个项目的图标。不同的字体和间距是完全不同的,而且肯定要困难得多,因为您需要使用自定义的delegate(可能是QStyledItemDelegate)设置带有setPopup的自定义QListView,同时覆盖sizeHint()和@987654334 @方法。
标签: python autocomplete pyqt5 pyside2