Por que o parâmetro de botão "command" é executado quando declarado?
Em Python, o parâmetro "command" do widget Button é responsável por definindo uma função de retorno de chamada. No entanto, os usuários podem ficar perplexos quando esta função de retorno de chamada parece ser executada imediatamente após a declaração do Button.
Esse problema surge quando o parâmetro "command" recebe uma expressão de chamada de função em vez de um objeto de função. Por exemplo:
def Hello():
print("Hi there!")
Button(frame, text="Hello", command=Hello()) # Function call expression
Neste código, a expressão "Hello()" chama a função Hello imediatamente, retornando seu valor de retorno. Como resultado, a função de retorno de chamada é executada antes da criação do botão, resultando na mensagem "Olá!" mensagem sendo impressa no console.
Para evitar esse problema e atribuir o objeto de função ao parâmetro "command", use o nome da função sem parênteses:
Button(frame, text="Hello", command=Hello) # Function object
Os objetos de função contêm referências ao seu código, que será executado quando o retorno de chamada for invocado. Além disso, se argumentos precisarem ser passados, expressões lambda podem ser empregadas:
Button(frame, text="Hello", command=lambda: Goodnight("Moon"))
Nesse caso, a expressão lambda encapsula a chamada Goodnight("Moon"), atrasando sua execução até que o botão seja clicado.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3