Не знаю, почему ярлык не обновляется с помощью tkinter

Я новичок в python и пытаюсь создать простую систему входа в систему для школьной программы вместе с ее графическим интерфейсом.

Я проделал хорошую работу, так как я новичок в python (и кодировании в целом) и пытаюсь научиться работать с tkinter.

Я во всем разобрался, кроме того случая, когда я пытался заставить программу изменить текст метки, когда пользователь "access = True".

Вот фрагмент кода:

from tkinter import *
from time import sleep

usernamelist = ["bob123","tim321","me","duda"]
passwordlist = ["banana","apple","password123","duda2000"]


def checklogin():
    global access
    global mode
    username = entuser.get()
    password = entpass.get()
    userfound = False
    if username == "admin":
        if password == "allowmein":
            access = True
            mode = "admin"
        else:
            lberror.config(text="Incorrect password, try again")
            entpass.delete(0, END)
    else:
        for i in range(len(usernamelist)):
            if username == usernamelist[i]:
                userfound = True
                if password == passwordlist[i]:
                    access = True
                else:
                    lberror.config(text="Incorrect password, try again")
                    entpass.delete(0, END)
    if userfound == False and username != "admin":
        lberror.config(text="Username not found, try again")
        entuser.delete(0, END)
        entpass.delete(0, END)
    if access == True:
        lberror.config(text= "Access Granted")
        sleep(1)
        mainlog.destroy()
        return access
        return mode


access = False
mode = "student"

mainlog = Tk()
mainlog.title("Maths Quiz Login")
lbuser = Label(mainlog, text= "Username: ")
lbpass = Label(mainlog, text= "Password: ")
entuser = Entry(mainlog,)
entpass = Entry(mainlog, show="*")
logbtn = Button(mainlog, text= "Login", command= checklogin)
lberror = Label(mainlog, text= "")

lbuser.grid(row=0, column=0)
lbpass.grid(row=1, column=0)
entuser.grid(row=0, column=1)
entpass.grid(row=1, column=1)
logbtn.grid(row=2, column=1)
lberror.grid(row=3,column = 0, columnspan = 2)

mainlog.geometry("250x150+100+100")

mainlog.mainloop()

Когда я пытаюсь запустить код, метка lberror, кажется, подчиняется всем командам, когда приказано показать неправильный пароль или имя пользователя, не найденное, когда происходят соответствующие события, но он не показывает предоставленный доступ, и я пытался найти объяснения, и я не мог т удается найти.


person Antonio Bento Pereira    schedule 03.05.2018    source источник
comment
Большое спасибо Керен! Я не знал об этом! Это было как раз то, что я искал, Огромная благодарность!   -  person Antonio Bento Pereira    schedule 03.05.2018


Ответы (1)


Кажется, вы уничтожаете окно после того, как изменили метку на «Доступ разрешен»: mainlog.destroy()

Если вы уберете уничтожение окна, отобразится «Доступ разрешен».

Если вы действительно хотите, чтобы окно было уничтожено после успешного входа в систему, добавьте mainlog.update() перед sleep(1).

if access == True:
        lberror.config(text= "Access Granted")
        mainlog.update()
        sleep(1)
        mainlog.destroy()
        return access
        return mode
person RealPawPaw    schedule 03.05.2018
comment
Если это ответило на ваш вопрос, рассмотрите возможность голосования или пометки ответа как принятого. - person RealPawPaw; 03.05.2018