Как достать значение поля Entry из дочернего окна Tkinter
Есть дочерние окно "Register Form" там поля Entry из которых я хочу получить переменные login и password, но там какая-то ошибка, причем в родительском окне "Login Form" все нормально.
from tkinter import Tk, Label, Entry, Button, StringVar
def insert_user(login, password):
print(f'login: {login} \n passwword: {password}')
print('its okay')
def submit():
login = login_var.get()
password = password_var.get()
insert_user(login, password)
login_var.set("")
password_var.set("")
def open_register_window():
root2 = Tk()
root2.title("Register Form")
root2.geometry("300x250")
root2.resizable(False, False)
Label(root2, text="Login:").grid(row=0, column=0)
Entry(root2, textvariable=login_var).grid(row=0, column=1)
Label(root2, text="Password:").grid(row=1, column=0)
Entry(root2, textvariable=password_var, show='*').grid(row=1,
column=1)
Button(root2, text="Submit", command=submit).grid(row=2, column=1)
Label(root2, text="Login:").grid(row=0, column=0)
Entry(root2, textvariable=login_var).grid(row=0, column=1)
Label(root2, text="Password:").grid(row=1, column=0)
Entry(root2, textvariable=password_var, show='*').grid(row=1, column=1)
Button(root2, text="Submit", command=submit).grid(row=2, column=1)
root = Tk()
root.title("Login Form")
login_var = StringVar()
password_var = StringVar()
Label(root, text="Login:").grid(row=0, column=0)
Entry(root, textvariable=login_var).grid(row=0, column=1)
Label(root, text="Password:").grid(row=1, column=0)
Entry(root, textvariable=password_var, show='*').grid(row=1, column=1)
Button(root, text="Submit", command=submit).grid(row=2, column=1)
Button(root, text="Create new account", command=open_register_window).grid(row=3,
column=1)
root.mainloop()
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
Начнём с того, что должно быть только одно главное окно и создавать второе окно через root2 = Tk()
не правильно! Нужно делать -> root2 = tk.Toplevel(root)
Так же не нужно завязывать поля login_var = StringVar()
и password_var = StringVar()
на все новые окна одновременно. Лучше для каждого окна создать свои объекты.
Немного подшаманил вам код, но задумайтесь о рефакторинге:
from tkinter import Tk, Label, Entry, Button, StringVar, Toplevel
def insert_user(login, password):
print(f'login: {login} \n passwword: {password}')
print('its okay')
def submit():
login = login_var.get()
password = password_var.get()
insert_user(login, password)
login_var.set("")
password_var.set("")
def open_register_window():
def submit2():
login = login_var2.get()
password = password_var2.get()
insert_user(login, password)
login_var2.set("")
password_var2.set("")
root2 = Toplevel(root)
root2.title("Register Form")
root2.geometry("300x250")
root2.resizable(False, False)
login_var2 = StringVar()
password_var2 = StringVar()
Label(root2, text="Login:").grid(row=0, column=0)
Entry(root2, textvariable=login_var2).grid(row=0, column=1)
Label(root2, text="Password:").grid(row=1, column=0)
Entry(root2, textvariable=password_var2, show='*').grid(row=1,
column=1)
Button(root2, text="Submit", command=submit2).grid(row=2, column=1)
root = Tk()
root.title("Login Form")
login_var = StringVar()
password_var = StringVar()
Label(root, text="Login:").grid(row=0, column=0)
Entry(root, textvariable=login_var).grid(row=0, column=1)
Label(root, text="Password:").grid(row=1, column=0)
Entry(root, textvariable=password_var, show='*').grid(row=1, column=1)
Button(root, text="Submit", command=submit).grid(row=2, column=1)
Button(root, text="Create new account", command=open_register_window).grid(row=3,
column=1)
root.mainloop()