Вызывать две функции одновременно из выпадающего списка?

#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. Я надеюсь, ты понял это.