PyQt 自动完成 QlineEdit 不显示列表项
PyQt Autocomplete QlineEdit Doesn't Show List Items
我写了一个从数据库中获取数据的方法。
def connect():
connection = pymssql.connect(".","sa", "1234","Deneme")
cursor = connection.cursor()
cursor.execute("select BolumAdi from BOLUMLER")
return cursor.fetchone() //problem is here
此方法从数据库中获取一个数据并使用它:
def main():
app = QtGui.QApplication(sys.argv)
edit = QtGui.QLineEdit()
list = connect()
completer = QtGui.QCompleter(list,edit)
edit.setWindowTitle("PyQT QLineEdit Auto Complete")
edit.setCompleter(completer)
edit.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
效果很好。但这只显示了一个数据,因为上面 cursor.fetchone()
。当我更改此行 cursor.fetchall()
时,我可以从数据库中获取所有数据,但这次引发异常:
TypeError: arguments did not match any overloaded call:
QCompleter(QObject parent=None): argument 1 has unexpected type 'list'
QCompleter(QAbstractItemModel, QObject parent=None): argument 1 has unexpected type 'list'
QCompleter(list-of-str, QObject parent=None): argument 1 has unexpected type 'list'
那么问题是什么?
方法connect()
returns一个列表。您想要此列表中的一个元素:
val = connect()[0]
completer = QtGui.QCompleter(val, edit)
因为它在您使用 fetchone() 时起作用,这意味着正在使用 QCompleter 的第三个构造函数。如果 fetchone() returns 一个 "record",即一个字符串元组(每个选择的列一个),这是有意义的。由于fetchall()returns一个记录列表,而你只需要每条记录的第一个字段,所以你需要先提取数据:
# strings = connect() # if fetchone()
strings = [item[0] for item in connect()] # if fetchall()
completer = QtGui.QCompleter(strings)
我写了一个从数据库中获取数据的方法。
def connect():
connection = pymssql.connect(".","sa", "1234","Deneme")
cursor = connection.cursor()
cursor.execute("select BolumAdi from BOLUMLER")
return cursor.fetchone() //problem is here
此方法从数据库中获取一个数据并使用它:
def main():
app = QtGui.QApplication(sys.argv)
edit = QtGui.QLineEdit()
list = connect()
completer = QtGui.QCompleter(list,edit)
edit.setWindowTitle("PyQT QLineEdit Auto Complete")
edit.setCompleter(completer)
edit.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
效果很好。但这只显示了一个数据,因为上面 cursor.fetchone()
。当我更改此行 cursor.fetchall()
时,我可以从数据库中获取所有数据,但这次引发异常:
TypeError: arguments did not match any overloaded call:
QCompleter(QObject parent=None): argument 1 has unexpected type 'list'
QCompleter(QAbstractItemModel, QObject parent=None): argument 1 has unexpected type 'list'
QCompleter(list-of-str, QObject parent=None): argument 1 has unexpected type 'list'
那么问题是什么?
方法connect()
returns一个列表。您想要此列表中的一个元素:
val = connect()[0]
completer = QtGui.QCompleter(val, edit)
因为它在您使用 fetchone() 时起作用,这意味着正在使用 QCompleter 的第三个构造函数。如果 fetchone() returns 一个 "record",即一个字符串元组(每个选择的列一个),这是有意义的。由于fetchall()returns一个记录列表,而你只需要每条记录的第一个字段,所以你需要先提取数据:
# strings = connect() # if fetchone()
strings = [item[0] for item in connect()] # if fetchall()
completer = QtGui.QCompleter(strings)