gpt4 book ai didi

python - 立即在 QStyledItemDelegate 中弹出 QCompleter,无需文本输入

转载 作者:太空宇宙 更新时间:2023-11-03 20:12:32 24 4
gpt4 key购买 nike

我在 QTableWidget 列上有一个 QCompleter。一旦用户开始编辑,我希望弹出完成程序,而不是等待他们先输入文本。我将 QStyledItemDelegate 的 setEditorData 函数子类化来执行此操作,这对我来说似乎最有意义,但是当我调用 completer.complete() 时,在完成编辑之前不会发生任何事情(此时弹出窗口会触发) )。

这是我的委托(delegate)代码:

class CompleterItemDelegate(QtGui.QStyledItemDelegate):
def createEditor(self, parent, option, index):
completer = QtGui.QCompleter(['test', 'test2'])
completer.setCompletionMode(completer.UnfilteredPopupCompletion)

edit = QtGui.QLineEdit(parent)
edit.setCompleter(completer)
return edit

def setEditorData(self, editor, index):
completer = editor.completer()
completer.complete() # does not fire until after editing is done
completer.popup().show() # no luck here either
print("setting editor data") # this however does work as expected...
super().setEditorData(editor, index)

最佳答案

您必须调用complete()当显示小部件时,您可以使用 showEvent()方法:

from PyQt4 import QtCore, QtGui


class LineEdit(QtGui.QLineEdit):
def showEvent(self, event):
if self.completer() is not None:
QtCore.QTimer.singleShot(0, self.completer().complete)
super().showEvent(event)


class CompleterItemDelegate(QtGui.QStyledItemDelegate):
def createEditor(self, parent, option, index):
completer = QtGui.QCompleter(["test", "test2"])
completer.setCompletionMode(QtGui.QCompleter.UnfilteredPopupCompletion)
edit = LineEdit(parent)
edit.setCompleter(completer)
return edit


def main(args):
app = QtGui.QApplication(args)

w = QtGui.QTableWidget(4, 4)
delegate = CompleterItemDelegate(w)
w.setItemDelegate(delegate)
w.show()

ret = app.exec_()
return ret


if __name__ == "__main__":
import sys

sys.exit(main(sys.argv))

关于python - 立即在 QStyledItemDelegate 中弹出 QCompleter,无需文本输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58637105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com