python GUI按键值自动完成
我试图用python创建一个自动完成GUI,这样当我键入名字时,我就可以看到可能的姓氏。例如,假设我有一本字典:python GUI按键值自动完成,python,pyqt,pyqt5,qlineedit,qcompleter,Python,Pyqt,Pyqt5,Qlineedit,Qcompleter,我试图用python创建一个自动完成GUI,这样当我键入名字时,我就可以看到可能的姓氏。例如,假设我有一本字典:{“乔治”:[“华盛顿”,“布什”]}。当我开始输入“G”时,我希望它显示“华盛顿”和“布什”。当选择“华盛顿”时,我希望“华盛顿”显示。我是GUI新手,我认为PyQt有一个自动补全的例子,但是单词不是键值对而是单词列表。 有没有办法编辑链接中的代码以便启用此功能?谢谢大家! 必须重写pathFromIndex方法,以便在选择某些文本时,QLineEdit中会写入相应的选项,并且要更
{“乔治”:[“华盛顿”,“布什”]}
。当我开始输入“G”时,我希望它显示“华盛顿”和“布什”。当选择“华盛顿”时,我希望“华盛顿”显示。我是GUI新手,我认为PyQt有一个自动补全的例子,但是单词不是键值对而是单词列表。
有没有办法编辑链接中的代码以便启用此功能?谢谢大家! 必须重写pathFromIndex方法,以便在选择某些文本时,QLineEdit中会写入相应的选项,并且要更改弹出窗口中显示的内容,应使用委托
from PyQt5 import QtCore, QtGui, QtWidgets
def create_model(d):
model = QtGui.QStandardItemModel()
for key, value in d.items():
for val in value:
it = QtGui.QStandardItem(key)
it.setData(val, QtCore.Qt.UserRole)
model.appendRow(it)
return model
class StyledItemDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super(StyledItemDelegate, self).initStyleOption(option, index)
option.text = index.data(QtCore.Qt.UserRole)
class Completer(QtWidgets.QCompleter):
def __init__(self, parent=None):
super(Completer, self).__init__(parent)
QtCore.QTimer.singleShot(0, self.change_delegate)
@QtCore.pyqtSlot()
def change_delegate(self):
delegate = StyledItemDelegate(self)
self.popup().setItemDelegate(delegate)
def pathFromIndex(self, index):
return index.data(QtCore.Qt.UserRole)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
d = {
"George": ["Washington", "Bush"],
"Languages": ["Python", "C++"]
}
model = create_model(d)
w = QtWidgets.QLineEdit()
completer = Completer(w)
completer.setModel(model)
w.setCompleter(completer)
w.show()
sys.exit(app.exec_())
您的解释有点混乱,使用您建议的词典1)如果在QLineEdit中编写
“Geo”
弹出窗口应显示什么:不应显示任何内容,显示“华盛顿”
和“布什”
或显示“乔治华盛顿”
和“乔治布什”
?2)如果选择了一个项目,那么QLineEdit中应该显示什么:“Geo”+项目
或“George”+项目
?@eyllanesc对于混淆表示抱歉。当我开始输入“G”时,我希望它显示“华盛顿”和“布什”。当选择“华盛顿”时,我希望“华盛顿”显示。感谢您的澄清建议。我会更新这个问题。好的,我还有一个问题:{George:Washington,George:Bush}
不是有效的字典。条目是否可以是{“乔治”:[“华盛顿”,“布什”]}
?。另外,您使用的是PyQt4还是PyQt5?您是对的。该值将是一个列表。我猜是PyQt5,但我是PyQt的新手,老实说,我不确定该选哪个。你知道我如何使用PyQt5@eyllansc解决这个问题吗?