В чем разница между передачей команды doSomething и doSomething () кнопке Tkinter? - PullRequest
1 голос
/ 29 апреля 2019

Я хочу знать, почему myBtn = Button(text="btn", command=doSomething) отличается от myBtn = Button(text="btn", command=doSomething()).

Когда я создаю кнопку и добавляю команду doSomehting, myBtn = Button(text="btn", command=doSomething), я получаю ожидаемое поведение - он что-то делает.

Но когда я создаю кнопку и добавляю команду doSomething(), myBtn = Button(text="btn", command=doSomething()), она получает неожиданное поведение - она ​​вызывает doSoemthing(), а нажатия кнопок ничего не делают.

Почему это происходит?

from tkinter import *
import datetime
import random

def printRandNum():
    random.seed()
    val = random.randint(1, 1000)
    print(val)


top = Tk()
now = datetime.datetime.now()

top.title("Test Window")
top.geometry('800x600')

name = Label(top, text="Alex", fg="Orange", font="monospace 36 bold", anchor="w", width=50)
theDate = Button(top, text="Click here for the date", command=printRandNum)

theDate.pack(side=BOTTOM)
name.pack(side=LEFT)
top.mainloop()

1 Ответ

3 голосов
/ 29 апреля 2019

Когда вы пишете doSomething, myBtn = Button(text="btn", command=doSomething, вы передаете функцию doSomething в качестве параметра, чтобы Button мог вызывать ее при нажатии. Когда вы пишете myBtn = Button(text="btn", command=doSomething()), вы передаете возвращаемое значение функции в качестве параметра, это означает, что объект Button не может вызвать функцию doSomething, поскольку он получает только возвращаемое значение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...