簡體   English   中英

Python, Kivy, "AssertionError: None is not callable" function 按鈕調用錯誤

[英]Python, Kivy, "AssertionError: None is not callable" Error on function call by button

所以我想使用此代碼在按下按鈕時調用 function:

botao_ok.bind(on_press=f_adicionar_socios(txt_n_socio.text,txt_nome.text,txt_filho_de.text,txt_filho_e_de.text,txt_data_nas.text,txt_tipo_ID.text,txt_num_ID.text,txt_NIF.text,txt_morada_rua.text,txt_morada_localidade.text,txt_codigo_postal.text,txt_tel_fixo.text,txt_telemovel.text,txt_email.text,txt_tipo_socio.text,txt_data_admicao.text,txt_zona.text,txt_actividade.text,txt_actividade_de.text,txt_actividade_ate.text,txt_observacoes.text))

但為了簡單起見,我只需要解決這個問題:

#My Function
def teste_(nome):
    print nome
#Button
botao_ok.bind(on_press=teste_('Ola'))
# Button is inside a Class MYApp

它給出了錯誤:AssertionError: None is not callable

我已經嘗試了所有我遇到的困難,但無法解決這個問題......謝謝

當你寫teste_('Ola')函數運行並返回None

所以當你寫

botao_ok.bind(on_press=teste_('Ola'))

它實際上被設置為:

botao_ok.bind(on_press=None)

簡而言之,這導致了您的問題。

為了讓它在按下按鈕時調用teste_('Ola') ,您可以使用 lambda 函數:

botao_ok.bind(on_press=lambda x:teste_('Ola'))

如果您的 function 呼叫不需要任何 arguments,您可以寫下不帶括號的 function 的名稱或 lambda:

function_caller.bind(on_press=your_function)

這是可行的,因為 python 將函數視為一等值,就像字符串、integer 或浮點數一樣。

(這個答案是為那些有類似問題並想要更清晰代碼的人准備的,在這種情況下的正確答案就是文森特上面描述的)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM