Windows在执行程序后没有响应,Python3

h9a6wy2h  于 2023-03-13  发布在  Python
关注(0)|答案(1)|浏览(136)

启动程序后,它冻结,并显示Windows没有响应。我认为这是我的更新功能,使这个问题。我想一些指导如何解决它。

def anime(self):
        self.toplevel = tk.Toplevel(self)
        self.toplevel.title("Animations")
        self.toplevel.geometry('600x500')
        self.caisse = ttk.Label(self.toplevel, text = 'Numero appele: ')
        self.caisse.place(x = 1, y =20)
        self.caisse.config(font = ('calibri', 10, 'bold'),background = 'green', foreground ='white')
        self.numerotop = ttk.Label(self.toplevel, text = self.numero_box.get())
        self.numerotop.config(font = ('calibri', 10, 'bold'),background = 'gray', foreground ='black')
        self.numero_box.focus()
        self.img = ImageTk.PhotoImage(Image.open("C:/Users/hp/Desktop/Fond.jpeg").resize((300,350)))
        #self.img = ImageTk.PhotoImage(Image.open("/Users/test/Desktop/koul.jpg").resize((300,50)))
        self.imga = ttk.Label(self.toplevel, image = self.img)
        self.imga.config()
        self.imga.pack()

        def update():
            #self.date_now = datetime.now().strftime("%d-%m-%Y %H:%M:%S")
            self.date_now = datetime.now().strftime("%d-%m-%Y")
            self.time_now = datetime.now().strftime("%H:%M")
            self.date_label = ttk.Label(self.toplevel, text = self.date_now)
            self.date_label.place(x = 450, y= 10)
            self.date_label.after(1000, update)
            self.date_label.config(font = ('calibri', 20, 'bold'),background = 'gray', foreground ='black')

            self.time_label = ttk.Label(self.toplevel, text = self.time_now)
            self.time_label.place(x = 450, y= 40)
            self.time_label.after(1000, update)
            self.time_label.config(font = ('calibri', 20, 'bold'),background = 'gray', foreground ='black')

        update()

我试着做一个有标签显示日期和时间的窗口,时间应该每1000ms更新一次。它没有更新日期和时间,而是冻结了整个程序。

qnakjoqk

qnakjoqk1#

首先,您没有启动self的主循环。toplevel在代码的end处通过self.toplevel.mainloop()启动您的主循环。并且,为了更新时间,您可以使用下面的语句,而不是像在代码中那样使事情复杂化

self.date_label = ttk.Label(self.toplevel, text="")
self.time_label = ttk.Label(self.toplevel, text="")
self.date_label.place(x = 450, y= 10)
self.time_label.place(x = 450, y= 40)
self.date_label.config(font = ('calibri', 20, 'bold'),background = 'gray', foreground ='black')
self.time_label.config(font = ('calibri', 20, 'bold'),background = 'gray', foreground ='black')
def update():
        #self.date_now = datetime.now().strftime("%d-%m-%Y %H:%M:%S")
        self.date_now = datetime.now().strftime("%d-%m-%Y")
        self.time_now = datetime.now().strftime("%H:%M")
        self.date_label.configure(text=self.date_now)
        self.time_label.configure(text=self.time_now)

self.toplevel.after(1000, update)

所以,关于为什么你的解决方案可能不起作用,是因为递归错误没有被tkinter正确地处理。我在我的程序中也遇到过这种问题,tkinter没有一个安全的保护系统来防止无限递归。另一个可能是你没有启动self.toplevel属性的主循环

相关问题