поэтому я делаю простой вход в систему и зарегистрирую страницу, и все идет хорошо, пока я не попытаюсь получить мои переменные из своего определения для моей страницы регистрации. Python говорит, что это неразрешенная ссылка, которая должна разрешать совпадения ввода и все, кроме, может быть, кто-то может помочь. Также я знаю, что есть более простой способ добавить страницы, используя классы, но я решил сделать это таким образом. Спасибо заранее. p.s ошибка находится в коде sign_up_check(), который переменные получают из определения sign_up().Tkinter in python: Неразрешимая ссылка
import tkinter
# window set up
window = tkinter.Tk()
window.geometry("300x200")
window.title("Game")
window.configure(bg="grey26")
# username label
lbl = tkinter.Label(window, text="username", bg="gold")
enter_username = tkinter.Entry(window, bg="indian red1")
lbl.pack()
enter_username.pack()
# password setup
label_password = tkinter.Label(window, text="password", bg="gold")
enter_password = tkinter.Entry(window, bg="indian red1")
label_password.pack()
enter_password.pack()
# sign in
def log_in():
username = enter_username.get()
password = enter_password.get()
if len(username) > 0 and len(password) > 0:
print("it passed")
else:
print("Log in error: Double check username and password")
def sign_up_check():
# init vars
username = signup_username.get()
password = signup_pasword.get()
age = signup_age.get()
# check if vars greater than one
if len(username) > 0 and len(password) > 0 and age > 0:
print("this all passed")
else:
print("all else failed")
def sign_up():
# create new window
window1 = tkinter.Toplevel()
window1.geometry("300x200")
window1.title("Sign up")
window1.configure(bg="grey26")
# create buttons and labels
# username
label_sign_up = tkinter.Label(window1, text="Enter new username", bg="indian red1")
signup_username = tkinter.Entry(window1, bg="gold")
label_sign_up.pack()
signup_username.pack()
# password
label_sign_up_password = tkinter.Label(window1, text="Enter new password", bg="indian red1")
signup_password = tkinter.Entry(window1, bg="gold")
label_sign_up_password.pack()
signup_password.pack()
# age
label_enter_age = tkinter.Label(window1, text="Enter your age", bg="indian red1")
signup_age = tkinter.Entry(window1, bg="gold")
label_enter_age.pack()
signup_age.pack()
# confirm account
button_account = tkinter.Button(window1, text="Create account", bg="red", command=lambda: sign_up_check())
button_account.pack()
# log in button set up
button_login = tkinter.Button(window, text="Log in", bg="gold", command=lambda: log_in())
button_login.pack()
# sign up button
button_signup = tkinter.Button(window, text="Sign up", bg="gold", command=lambda: sign_up())
button_signup.pack()
window.mainloop()
С одной стороны, в 'sign_up_check()' у вас есть 'password = signup_pasword.get()' вместо 'password = signup_password.get()'. Даже если вы исправите это, 'signup_password' - это локальная переменная, определенная в функции' sign_up() '(на которую нельзя ссылаться вне ее и исчезнет, как только функция вернется). Чтобы избежать этой проблемы, вы должны использовать классы (или глобальные переменные, что многие люди делают, чтобы обойти это). – martineau