#python #python-3.x #tkinter
#python #python-3.x #tkinter
Вопрос:
Я работал над страницей входа в Tkinter для развлечения, но я не могу создать функцию, которая проверяет записи и сравнивает их с определенным входом. Кроме того, код добавляет окно сообщения и вызывает функцию каждый раз, когда я выхожу из окна.
Мой код:
from tkinter import *
from tkinter import messagebox
root = Tk()
root.title("Login")
def makeUname(d):
if messagebox.askyesno("Submit?", "Is this correct?"):
global password
username = uname.get()
uname.grid_forget()
return password
def makePasswd(d):
if messagebox.askyesno("Submit?", "Is this correct?"):
global username
password = uname.get()
passwd.grid_forget()
return username
def button():
makeUname("")
makePasswd("")
quitbutt.grid_forget()
uname = Entry(root)
uname.grid(row=1, column=1)
passwd = Entry(root, show="*")
passwd.grid(row=2, column=1)
quitbutt = Button(root, text="Login", command=button)
quitbutt.grid(row=3, column=1, columnspan=2, sticky='nesw')
root.mainloop()
makeUname("")
makePasswd("")
if(username == "username" and password == "password"):
messagebox.showwarning("Warning", "Sorry, this isn't programmed yet.")
else:
messagebox.showwarning("Nope", "Nope. Nice try.")
Кто-нибудь может помочь мне с моим кодом? Должен ли я использовать другую настройку или метод?
Комментарии:
1. весь код после
mainloop()
выполняется после закрытия окна — и у вас естьmessagebox.showwarning()
aftermainloop
, так что вы видитеmessagebox
после закрытия окна.2.
uname.get()
в ваших функциях отображается текст изEntry
— вам нужно использовать толькоprint(uname.get())
, чтобы увидеть его.3. в функции, которую вы используете,
global username
но вы присваиваете значениеpassword
— это не имеет смысла.
Ответ №1:
Было много проблем, поэтому я изменил все, чтобы упростить.
Я добавил комментарии в код, чтобы объяснить некоторые элементы.
from tkinter import *
from tkinter import messagebox
# --- functions ---
def button():
# use global variable (instead of local variables)
# to keep username, password outside function and keep after closing window
global username
global password
username = uname.get()
password = passwd.get()
#print('button:', username, password)
if username == "username" and password == "password":
messagebox.showwarning("Warning", "Sorry, this isn't programmed yet.")
root.destroy() # close window
else:
messagebox.showwarning("Nope", "Nope. Nice try.")
# window still open
# --- main ---
# default values at start
# Someone can exit window without using Button
# and it would not create this variables in button()
username = ""
password = ""
root = Tk()
root.title("Login")
uname = Entry(root)
uname.grid(row=1, column=1)
passwd = Entry(root, show="*")
passwd.grid(row=2, column=1)
quitbutt = Button(root, text="Login", command=button)
quitbutt.grid(row=3, column=1, columnspan=2, sticky='nesw')
# start program (start engine, display window, (re)draw widgets, handle events, get events from system (keyboard, mouse), send events to widgets)
root.mainloop()
# after closing window this variables still have values from window
print("after mainloop:", username, password)
Комментарии:
1. Извините, что было так много проблем — я полный любитель в этом, и я очень благодарен за это. Теперь я могу сделать то, что собирался сделать после входа в систему.