【问题标题】:Tkinter button not reacting as I expected with Sleep with pythonTkinter 按钮没有像我预期的那样对 Sleep with python 做出反应
【发布时间】:2023-01-24 03:18:41
【问题描述】:

我正在尝试创建一个登录按钮,其中密码闪烁红色,然后在输入错误密码时恢复正常,但它不起作用。

#   A program creates a window on your screen using Tkinter.
import tkinter as tk
import time 
def testmybutton():
    Correctpassword = "Pa$$w0rd"
    frame_auth.tkraise()
    password = ent_password.get()
    username = ent_username.get()
    if password == Correctpassword:
        lbl_new.config(text='Logged in')
    else:
        frame_login.tkraise()
        ent_password.config(bg="red")
        time.sleep(2)
        ent_password.config(bg='white')
# main window
root = tk.Tk()
root.wm_geometry("200x150")
root.title('Authorization')

frame_login = tk.Frame(root)
frame_login.grid(row=0, column=0, stick='NEWS')

lbl_username = tk.Label(frame_login, text='Username:', cursor="heart", bg='white', relief='flat')
lbl_username.pack()

ent_username = tk.Entry(frame_login, bd=5)
ent_username.pack(padx=40)


lbl_password = tk.Label(frame_login, text='password:', cursor="heart", bg='white', relief='flat')
lbl_password.pack()

ent_password = tk.Entry(frame_login, bd=5, show='+')
ent_password.pack(padx=40)

lbl_button = tk.Button(frame_login, text='LOG IN:', cursor="pirate", bg='white', relief='raised', command=testmybutton)
lbl_button.pack()


tk.Label(frame_login,text="Password:",font="Courier")

frame_auth = tk.Frame(root)
frame_auth.grid(row=0, column=0, stick='NEWS')

lbl_new = tk.Label(frame_auth, text='New Window:', cursor="heart", bg='white', relief='flat')
lbl_new.pack()


frame_login.tkraise()



root.mainloop()`

我已经尝试创建第二个函数并在测试我的按钮函数中调用它,但这也没有用。

【问题讨论】:

    标签: python tkinter sleep


    【解决方案1】:

    您应该避免在 tkinter 应用程序中的任何地方使用 sleep,因为它会导致主 UI 线程/事件循环在休眠时挂起。

    相反,您应该使用内置的 tkinter.after() 方法,它允许您在给定的毫秒数后调用函数

    def testmybutton():
        Correctpassword = "Pa$$w0rd"
        frame_auth.tkraise()
        password = ent_password.get()
        username = ent_username.get()
        if password == Correctpassword:
            lbl_new.config(text='Logged in')
        else:
            frame_login.tkraise()
            ent_password.config(bg="red")
            # call this function anonymously after 2000mS (2 seconds)
            root.after(lambda: ent_password.config(bg='white'), 2000)
    

    【讨论】:

      猜你喜欢
      • 2012-06-13
      • 2017-09-26
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      相关资源
      最近更新 更多