簡體   English   中英

如何讓我的文本在 python 中出現然后消失?

[英]How do I make my text appear and then disappear in python?

from tkinter import *
import time

root = Tk()
root.title("Login Form")
root.configure(bg="#9febe9")
root.geometry("700x500")

# Creating Canvases
canvas = Canvas(root, width=500, height=380, bg="white")
canvas.place(relx=0.14, rely=0.122, anchor=NW)
main_rectange = canvas.create_rectangle(475, 0, 501, 500, outline="white", fill="#4286f5")
header_text = canvas.create_text(40, 50, text="Account Login", fill="#557ed5", font="Times 20 bold", anchor=NW)
user_name_text = canvas.create_text(40, 112, text="Username", fill="#a7a7a9", anchor=NW, font="20")
username_entry = Entry(canvas, borderwidth=0, bg="#e5e5e5")
canvas.create_window(40, 140, window=username_entry, anchor=NW, height=30, width=400)
canvas.create_text(40, 190, text="Password",  fill="#a7a7a9", anchor=NW, font="20")
password_entry = Entry(canvas, borderwidth=0, bg="#e5e5e5")
canvas.create_window(40, 210, window=password_entry, anchor=NW, height=30, width=400)
canvas.create_text(55, 255, text="Remember Me", anchor=NW, fill="#9a9d9c")
canvas.create_text(330, 255, text="Forgot Password?", anchor=NW, fill="#6d829f", font="bold 9")
login_button = Button(canvas, width=56, height=2, text="Log In", justify=CENTER, borderwidth=0, bg="#4286f5", fg="white", command=lambda: login_button())
canvas.create_window(40, 300, window=login_button, anchor=NW)

# Original Username and Password
original_username = "NightHawk510"
original_password = "ILOVECODING"

def login_button():
    username = username_entry.get()
    password = password_entry.get()
    if username == original_username and password == original_password:
        redirecting_text = canvas.create_text(40, 90, text="Credentials Match, Please Wait While We Redirect You To Your Vault", fill="red", anchor=NW)
        time.sleep(1.5)
        canvas.delete("all")
        print("ESHTA")
    else:
        print("NOT ESHTA")
        wrong_credentials_text = canvas.create_text(40, 90, text="Wrong Credentials, Try again", fill="red", anchor=NW)

    username_entry.delete(0, END)
    password_entry.delete(0, END)


root.mainloop()

好吧,所以我想讓文本只顯示幾秒鍾(例如 2 秒)但每次我添加 time.sleep() 然后 canvas.delete() 它甚至不顯示文本有人可以幫忙嗎?

canvas.delete("all")用於刪除畫布上的所有對象。

您只需要刪除 Label ,因此您可以將這段代碼替換為canvas.delete(redirecting_text) ,但是 Label 將不會被看到,因為在time.sleep()延遲之后,畫布將被重新繪制(更新)。

為避免這種情況,您可以編寫canvas.update_idletasks() ,但這不是正確的解決方案。

 if username == original_username and password == original_password:
        redirecting_text = canvas.create_text(40, 90, text="Credentials Match, Please Wait While We Redirect You To Your Vault", fill="red", anchor=NW)
        canvas.update_idletasks()
        time.sleep(1.5)
        canvas.delete(redirecting_text)

不要在窗口應用程序中使用time.sleep() ,因為調用此方法會凍結應用程序。

在 tkinter 一段時間后做某事的正確方法是調用after()方法。 像這樣的東西:

def hide_text(text):
    canvas.delete(text)

def login_button():
    username = username_entry.get()
    password = password_entry.get()
    if username == original_username and password == original_password:
        redirecting_text = canvas.create_text(40, 90, text="Credentials Match, Please Wait While We Redirect You To Your Vault", fill="red", anchor=NW)
        root.after(1500, lambda: hide_text(redirecting_text))        
        print("ESHTA")
    else:
        print("NOT ESHTA")
        wrong_credentials_text = canvas.create_text(40, 90, text="Wrong Credentials, Try again", fill="red", anchor=NW)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM