Как я могу это исправить, чтобы виджет password_entry был уничтожен после правильного пароля? - PullRequest
0 голосов
/ 15 января 2019

Я не могу понять, почему мой виджет password_entry не разрушается в следующем коде после ввода правильного пароля (asdf). Любые идеи о том, как это исправить?

Если вы нажмете на первую IMS, вы можете ввести имя пользователя (Marvin) и, если оно верное, вы можете ввести пароль (asdf). Если пароль верный, вы должны получить красный IMS и ничего не осталось.

Я не понимаю, почему username_entry уничтожается, а password_entry нет. Спасибо за вашу помощь!

from Tkinter import *
import time

title_active = False

root = Tk()
width_root = 1000
height_root = 600
root.geometry("1000x600+200+150")
rootcanvas = Canvas(root, width=1000, height=600)
rootcanvas.pack()

def create_title(color):
    global title_active, title_rect_length, title_rect_height, title_rect, title_text
    title_rect_length = 400
    title_rect_height = 100
    title_rect = rootcanvas.create_rectangle(width_root/2-title_rect_length/2, height_root/2-title_rect_height, width_root/2+title_rect_length/2, height_root/2+title_rect_height, width=5, outline=color)

    title_text = rootcanvas.create_text(width_root/2, height_root/2, text="IMS", font="Helvetica 200", fill=color)
    title_active = True

def check_password(event):
    global password_entry, password_text
    if password_entry.get() == "asdf":
        rootcanvas.delete(password_entry)
        rootcanvas.delete(password_text)
        create_title("red")
    else:
        print("password wrong")

def check_username(event):
    global password_text, password_entry, username_entry, username_text
    if username_entry.get() == "Marvin":
        rootcanvas.delete(username_entry)
        rootcanvas.delete(username_text)
        password_text = rootcanvas.create_text(width_root/2, height_root/2, text="Password", font="Helvetica 50", fill="blue")
        password_entry = Entry(rootcanvas)

        entry_x = width_root/2-110
        entry_y = height_root/2+20
        password_entry.place(x=entry_x, y= entry_y, width=220, height=40)
        password_entry.bind("<Return>", check_password)

    else:
        print("This user is unauthorized to enter IMS.")

def login_menu():
    global username_entry, username_text
    username_text = rootcanvas.create_text(width_root/2, height_root/2, text="Username", font="Helvetica 50", fill="blue")
    username_entry = Entry(rootcanvas)
    entry_x = width_root/2-110
    entry_y = height_root/2+20
    username_entry.place(x=entry_x, y= entry_y, width=220, height=40)
    username_entry.bind("<Return>", check_username)

def title_clicked():
    global title_active
    title_active = False
    rootcanvas.delete(title_rect)
    rootcanvas.delete(title_text)
    login_menu()

def click(event):
    global x,y, title_active
    x = event.x
    y = event.y
    if title_active == True:
        if width_root/2-title_rect_length/2 <= x <= width_root/2+title_rect_length/2 and height_root/2-title_rect_height <= y <= height_root/2+title_rect_height: 
            title_clicked()

rootcanvas.bind("<Button 1>", click)
create_title("blue")
root.mainloop()

1 Ответ

0 голосов
/ 15 января 2019

Измените "rootcanvas.delete(password_entry)" на "password_entry.destroy()" и то же самое для username_entry ("rootcanvas.delete(username_entry)" на "username_entry.destroy()"

Это должно исправить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...