【问题标题】:Call two functions simultaneously from a combobox?从组合框中同时调用两个函数?
【发布时间】:2021-11-19 06:25:15
【问题描述】:

我创建了两个函数,一旦我选择了组合框的项目,它们就必须同时启动。我试图通过编写使它们一起开始:combo_Campionato ['values'] = combo_campionato (), filter_campionato ()。第一个功能是通过导入组合框项。第二个函数确保通过选择组合框中的项目,网格中显示的行会根据所选的组合框项目进行“过滤”。

但我收到此错误:

    combo_Campionato['values'] = combo_campionati(), filtra_campionato()
TypeError: filtra_campionato() missing 1 required positional argument: 'campionato'

如果我删除第二个函数的名称,只保留第一个函数,脚本将正确启动:combo_Campionato ['values'] = 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)

我不知道我是否以正确的方式继续前进。如果我错了,当我选择组合框项目时,如何同时调用这两个函数?谢谢

【问题讨论】:

    标签: python sql python-3.x tkinter


    【解决方案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 将其解释为不同的变量。

    【讨论】:

    • 感谢您的回复。如果我删除“campionato”,我会收到错误:NameError: name 'results' is not defined。你有什么其他的建议?谢谢
    • 那是因为拼写错误:)。看看编辑。
    • 拼写错误?为什么?
    • resultsresult 查看第一和第二代码的最后几行。
    • 我希望你明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    相关资源
    最近更新 更多