2015-12-27 9 views
1

Я пишу метод, который получает данные из базы данных.PyQt Autocomplete 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' 

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

ответ

1

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

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

Спасибо, что это решение! –

1

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

val = connect()[0] 
completer = QtGui.QCompleter(val, edit) 
Смежные вопросы