Функция ввода не работает для простой программы

Мне трудно понять, почему этот очень простой кусок кода не работает. В основном это должно печатать все, что вы печатаете. Он работает без ошибок, но когда я набираю что-то в виджете ввода и нажимаю кнопку отправки, он ничего не печатает. Я использую Python 3.xx.

from tkinter import *

window = Tk()

def GET():
    typed = e.get()
    print(typed)

e = Entry(window)
e.pack()
b = Button(window, text = "Submit", command = GET())
b.pack()
window.mainloop()

2 ответа

Решение

Что вам нужно сделать, это установить команду GET вместо GET(), Все, что вам нужно сделать, это передать ссылку, а не полный вызов функции, потому что тогда она возвращает возвращаемое значение:

from tkinter import *

window = Tk()

def GET():
    typed = e.get()
    print(typed)

e = Entry(window)
e.pack()
b = Button(window, text = "Submit", command = GET) # GET not GET()
b.pack()
window.mainloop()

Теперь он выполнит GET соответственно. Обратному вызову нужна только ссылка на функцию, а не вызов функции, которая получит возвращаемое значение. В данном случае это None, и кнопка ничего не делает.

b = Button(window, text = "Submit", command = GET())

Обратите внимание, что, делая command=GET() вы вызываете функцию GET а затем передать его возвращаемое значение (None в этом случае) к command аргумент.

Вместо этого вы должны делать command=GET, Это пройдет функцию GET к command аргумент, а не его возвращаемое значение.

Другие вопросы по тегам