"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que o botão “Comando” é executado imediatamente quando declarado?

Por que o botão “Comando” é executado imediatamente quando declarado?

Publicado em 01/11/2024
Navegar:220

Why Does the Button \

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.

Declaração de lançamento Este artigo é reproduzido em: 1729295836 Se houver alguma violação, entre em contato com [email protected] para excluí -lo.
Tutorial mais recente Mais>

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