Возникли проблемы при получении данных из виджета Tkinter Entry Python 3 - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь внедрить систему входа в систему для создаваемой мной программы. Проблема заключается в попытке извлечь входные данные и сохранить их в переменной, когда пользователь нажимает кнопку «Отправить».

Я уже прочитал несколько статей на эту тему, но, похоже, ни одна из них не работает. В следующей программе удалено несколько разделов, но возникла та же проблема.

#Imports
import tkinter

#Initilization
master = tkinter.Tk()

#Defineing Variables

#Submit
def Submit():
    print("Creating Account...")
    master.destroy()

#Cancel
def Cancel():
    print("Login failed!")
    master.destroy()

#Build GUI
def BuildGUI():
    #Lables
    tkinter.Label(master, text="All avalibe feilds required.").grid(row=0)

    tkinter.Label(master, text="First Name").grid(row=1)

    #Input Fileds
    User_NameFirst = tkinter.StringVar()

    e1 = tkinter.Entry(master, textvariable=User_NameFirst)

    e1.grid(row=1, column=1)

    #Buttons
    tkinter.Button(master, text='Cancel', command=Cancel).grid(row=11, column=0, sticky='W', pady=4)
    tkinter.Button(master, text='Enter', command=Submit).grid(row=11, column=1, sticky='W', pady=4)
    tkinter.Button(master, text='Test', command=print(e1.get())).grid(row=12, sticky='W', pady=6, padx=6)

#Debug
BuildGUI()

#Mainloop
tkinter.mainloop()

Я ожидал, что когда я нажму «проверить», программа напечатает значение, которое я вменял в e1, для печати. Однако ничего не происходит. Я заметил, что при запуске программы терминал выводит несколько пустых строк.

1 Ответ

0 голосов
/ 23 апреля 2019

Комментарий Генри Йика верен - как показывает https://stackoverflow.com/a/5771787/11006183, Оператор print() был выполнен до того, как я нажал кнопку.

Чтобы исправить это, мне нужно было использовать функцию lambda:

tkinter.Button(master, text='Test', command=lambda: print(e1.get()) ).grid(row=12, sticky='W', pady=6, padx=6)
...