#python #sql #python-3.x #tkinter
Вопрос:
Я создал две функции, которые должны запускаться одновременно, как только я выбираю элементы выпадающего списка. Я попытался заставить их начать вместе, написав: combo_Campionato [‘значения’] = combo_campionato (), filter_campionato (). Первая функция заключается в импорте элементов выпадающего списка. Вторая функция гарантирует, что при выборе элемента в выпадающем списке строки, отображаемые в сетке, будут «отфильтрованы» в соответствии с выбранным элементом выпадающего списка.
Но я получаю эту ошибку:
combo_Campionato['values'] = combo_campionati(), filtra_campionato()
TypeError: filtra_campionato() missing 1 required positional argument: 'campionato'
Если я удалю имя второй функции и оставлю работать только первую, скрипт запустится правильно: combo_Campionato [‘значения’] = combo_campionato ()
Это и есть код:
def combo_campionati():
campionato = combo_Campionato.get()
cursor.execute('SELECT Nome_Campionato FROM ARCHIVIO_CAMPIONATI')
result=[row[0] for row in cursor]
return result
def filtra_campionato(campionato):
campionato = combo_Campionato.get()
cursor.execute('SELECT * FROM ARCHIVIO_Risultati WHERE campionato=?',(campionato,))
result=[row[0] for row in cursor]
return results
#Combobox Campionati
lbl_Campionato = Label(root, text="Campionato", font=("Calibri", 11), bg="#E95420", fg="white")
lbl_Campionato.place(x=6, y=60)
combo_Campionato = ttk.Combobox(root, font=("Calibri", 11), width=30, textvariable=campionato, state="readonly")
combo_Campionato.place(x=180, y=60)
combo_Campionato.set("Seleziona campionato")
combo_Campionato['values'] = combo_campionati(), filtra_campionato()
combo_Campionato.bind('<<ComboboxSelected>>', combo_squadre)
Я не знаю, правильно ли я двигаюсь дальше. Если я ошибаюсь, как я могу вызывать эти две функции одновременно при выборе элементов списка? Спасибо
Ответ №1:
Причина, по которой вы получаете ошибку, заключается в том, что вам нужно передать переменную внутри функции filtra_campionato
. Например, — что-то вроде — filtra_campionato(something)
Итак, вместо этого —
def filtra_campionato(campionato):
campionato = combo_Campionato.get()
cursor.execute('SELECT * FROM ARCHIVIO_Risultati WHERE campionato=?',(campionato,))
result=[row[0] for row in cursor]
return results
Удалите campionato
в (), потому что это не нужно —
def filtra_campionato():
campionato = combo_Campionato.get()
cursor.execute('SELECT * FROM ARCHIVIO_Risultati WHERE campionato=?',(campionato,))
result=[row[0] for row in cursor]
return result
Вам нужно — return result
не return results
потому, что оно единственное в result=[row[0] for row in cursor]
своем роде . Python интерпретирует его как другую переменную.
Комментарии:
1. Спасибо за ответ. Если я удалю «campionato», я получу ошибку: Ошибка имени: имя «результаты» не определено. У вас есть еще какие-нибудь предложения? Спасибо
2. Это из-за орфографической ошибки :). Посмотрите на правку.
3. орфографическая ошибка? Почему?
4.
results
иresult
посмотрите на последние строки первого и второго кода.5. Я надеюсь, ты понял это.