«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему кнопка «Команда» выполняется сразу после объявления?

Почему кнопка «Команда» выполняется сразу после объявления?

Опубликовано 1 ноября 2024 г.
Просматривать:233

Why Does the Button \

Почему параметр кнопки «command» выполняется при объявлении?

В Python параметр «command» виджета «Кнопка» отвечает за определение функции обратного вызова. Однако пользователи могут быть озадачены, когда эта функция обратного вызова выполняется сразу после объявления кнопки.

Эта проблема возникает, когда параметру «команда» присваивается выражение вызова функции вместо объекта функции. Например:

def Hello():
    print("Hi there!")

Button(frame, text="Hello", command=Hello())  # Function call expression

В этом коде выражение «Hello()» немедленно вызывает функцию Hello, возвращая ее возвращаемое значение. В результате функция обратного вызова выполняется до создания кнопки, в результате чего появляется сообщение «Привет!» сообщение выводится на консоль.

Чтобы избежать этой проблемы и присвоить объект функции параметру «команда», используйте имя функции без круглых скобок:

Button(frame, text="Hello", command=Hello)  # Function object

Объекты функции содержат ссылки на свой код, который будет выполнен при вызове обратного вызова. Кроме того, если необходимо передать аргументы, можно использовать лямбда-выражения:

Button(frame, text="Hello", command=lambda: Goodnight("Moon"))

В этом случае лямбда-выражение оборачивает вызов Goodnight("Moon"), откладывая его выполнение до тех пор, пока не будет нажата кнопка.

Заявление о выпуске Эта статья перепечатана по адресу: 1729295836. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3