时钟不更新尝试使用def与Tkin

2024-04-25 16:40:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我提出了另一个问题,即如何在没有线程的情况下进行循环: Threads And Time + Tkinter In Python 但它不像一个循环。它加载时钟正常,但不更新。你知道吗

import tkinter as tk

import datetime


class FirstFrame(tk.Frame):
    trys = 3
    timecall = datetime.datetime.now()

    def __init__(self, master, **kwargs):
        tk.Frame.__init__(self, master, **kwargs)
        self.pack()
        master.title("Enter password")
        master.geometry("300x300")

        self.clock = tk.Label(self, fg='blue')
        self.update()
        self.clock.pack()        

        self.status2 = tk.Label(self, fg='blue')
        self.status2.pack()
        self.status = tk.Label(self, fg='red')
        self.status.pack()

        self.number = tk.Label(self, fg='red')
        self.number.pack()

        self.trysremain = tk.Label(self, fg='red')
        self.trysremain.pack()

        self.userlbl = tk.Label(self, text='Enter Username')
        self.userlbl.pack()

        self.userE = tk.Entry(self)
        self.userE.pack()
        self.userE.focus()

        self.lbl = tk.Label(self, text='Enter Password')
        self.lbl.pack()

        self.pwd = tk.Entry(self, show="*") 
        self.pwd.pack()
        self.pwd.bind('<Return>', self.check)

        self.btn = tk.Button(self, text="Done", command=self.check)
        self.btn.pack()
        self.btn = tk.Button(self, text="Cancel", command=self.quit)
        self.btn.pack()

    def update(self, event=None):
            timecall = datetime.datetime.now()
            self.clock.config(text=self.timecall)
            self.after(1000, self.update)


    def check(self, event=None):

        if self.pwd.get() == app.password:
            if self.userE.get() == app.user:
                 self.destroy()
                 self.app= SecondFrame(self.master)
            else:
                self.status2.config(text="Wrong Username")

        else:
            self.trys = self.trys - 1
            self.status.config(text="Wrong password")
            self.number.config(text=self.trys)
            self.trysremain.config(text="Trys remaining")
            if self.trys == 0:
                root.destroy()
                root.quit()


class SecondFrame(tk.Frame):
    def __init__(self, master, **kwargs):
        tk.Frame.__init__(self, master, **kwargs)
        self.pack()
        master.title("Main Application")
        master.geometry("600x400")
        self.c = tk.Button(self, text="Options", command=self.third_frame_open)
        self.c.pack()

    def third_frame_open(self):
        self.destroy()
        self.app = ThirdFrame(self.master)


class ThirdFrame(tk.Frame):
    def __init__(self, master, **kwargs):
        tk.Frame.__init__(self, master, **kwargs)
        self.pack()
        self.password_set = tk.Label(self, fg='green')
        self.password_set.pack()
        master.title("Options")
        master.geometry("400x300")
        self.but2 = tk.Button(self, text="Go Back", command=self.second_frame_open)
        self.but2.pack()
        self.but1 = tk.Button(self, text="Change password", command=self.showpasswordinput)
        self.but1.pack()
        self.but1.bind('<Return>', self.showpasswordinput)

    def showpasswordinput(self):
        self.but1.pack_forget()
        self.e = tk.Entry(self.master, show="*")
        self.e.pack()
        self.e.focus()
        self.but2 = tk.Button(self, text="Change password", command=self.set_password)
        self.but2.pack()
        self.but2.bind('<Return>', self.set_password)

    def set_password(self):
        self.password_set.config(text="Password Updated")
        setpass = open("password_store.txt", "w")
        passvar = self.e.get()
        self.e.pack_forget()
        setpass.write(passvar)
        setpass.close()

    def second_frame_open(self):
        self.destroy()
        self.app= SecondFrame(self.master)

if __name__=="__main__":
    root = tk.Tk()
    app=FirstFrame(root)
    user = open("user_store.txt", "r")
    app.user = user.read()
    user.close()
    password2 = open("password_store.txt", "r")
    app.password = password2.read()
    password2.close()
    root.mainloop()

Tags: textselfmasterappinitdefbuttonpassword
1条回答
网友
1楼 · 发布于 2024-04-25 16:40:42

所以我得到了一些帮助,我设法找到了一个地方,上面写着:

def update(self, event=None):
    timecall = datetime.datetime.now()
    self.clock.config(text=self.timecall)
    self.after(1000, self.update)

我所要做的就是把self.clock.config(text=self.timecall)改成self.clock.config(text=timecall)

记入https://stackoverflow.com/users/1222951/rawing

相关问题 更多 >