Как сделать так, чтобы кнопка в tkinter выполняла свою команду?

Имеется вот такой код:

    uslog = tk.Entry(login, width=20, font="Calibri 20")
    uslog.place(x=60, y=100)
    atg = uslog.get()
    def logging(uslog, atg):
            print(atg)
    text1 = tk.Label(login, text="Введите ваш пароль:", font="Calibri 12", bg="limegreen")
    text1.place(x=60, y=140)
    uspass = tk.Entry(login, width=20, font="Calibri 20")
    uspass.place(x=60, y=165)
    reg_butt = tk.Button(login, width=16, height = 1, text="Зарегистрироваться", bg="cyan", command=logging(uslog, atg))
    reg_butt.place(x=145, y=210)

Но почему то logging() не вызывается при нажатии на кнопку регистрации

что делать?


Ответы (1 шт):

Автор решения: GrAnd

Функция не вызывается потому, что вы и так её уже позвали когда создавали кнопку.

reg_butt = tk.Button( .... command=logging(uslog, atg))
#                                         ^^^^^^^^^^^^
#                                         это вызов

Чтобы передать функцию с аргументами как обработчик события, надо её поместить в lambda, например.

reg_butt = tk.Button( .... command=lambda: logging(uslog, atg))

Второе... Значение atg надо доставать непосредственно в функции-обработчике. Там где оно у вас сейчас достаётся оно всегда пустое, и нет смысла передавать его как аргумент функции.

Итого:

def logging(uslog):
    atg = uslog.get()
    print(atg)

....

reg_butt = tk.Button( .... command=lambda: logging(uslog))
→ Ссылка