Автозаполнение PyQt QlineEdit не показывает элементы списка

Я пишу метод, который получает данные из базы данных.

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'

Так в чем проблема?

2 ответа

Решение

Поскольку он работает при использовании fetchone (), это означает, что используется третий конструктор QCompleter. Это имеет смысл, если fetchone () возвращает одну "запись", то есть набор строк (по одной для каждого выбранного столбца). Так как fetchall () возвращает список записей, и вам нужно только первое поле каждой записи, вам нужно извлечь данные в первую очередь:

# strings = connect()  # if fetchone()
strings = [item[0] for item in connect()]  # if fetchall()
completer = QtGui.QCompleter(strings)

Метод connect() возвращает список. Вы хотите один элемент из этого списка:

val = connect()[0]
completer = QtGui.QCompleter(val, edit)   
Другие вопросы по тегам