Почему параметр кнопки «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"), откладывая его выполнение до тех пор, пока не будет нажата кнопка.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3