Próbuję zrobić zegar cyfrowy poprzez kod Pythona Tkinter .my jest

import tkinter,time

def exiter():
    root.destroy()

root=tkinter.Tk()
root.title("Digital Clock")
root.geometry("340x100")
root.resizable(False,False)
root.protocol("WM_DELETE_WINDOW",exiter)

def time_setter():
    hr=tkinter.Label(root,font=('k',60,'bold'),text=time.strftime("%H:%M:%S"))
    hr.grid(row=0,column=0)

    

while True:
    root.update()
    time_setter()

Po zamknięciu okna otrzymuję błąd

Traceback (most recent call last):
  File "c:\Users\Tanmay Daga\OneDrive\Documents\Programming\Clock-Tkinter\digital_clock.py", line 20, in <module>
    time_setter()
  File "c:\Users\Tanmay Daga\OneDrive\Documents\Programming\Clock-Tkinter\digital_clock.py", line 13, in time_setter
    hr=tkinter.Label(root,font=('k',60,'bold'),text=time.strftime("%H:%M:%S"))
  File "C:\Program Files\Python39-32\lib\tkinter\__init__.py", line 3145, in __init__
    Widget.__init__(self, master, 'label', cnf, kw)
  File "C:\Program Files\Python39-32\lib\tkinter\__init__.py", line 2569, in __init__
    self.tk.call(
_tkinter.TclError: can't invoke "label" command: application has been destroyed

Jak złamać pętlę, gdy okno jest zamknięte.
Skąd mam wiedzieć, kiedy okno jest zamknięte

0
Tanmay Daga 26 październik 2020, 06:45

1 odpowiedź

Najlepsza odpowiedź
from tkinter import *
from time import strftime

def clock_tick():
    string = strftime('%H:%M:%S %p')
    lbl.config(text=string)#set the text
    lbl.after(1000, time)#updater 
    
root=Tk() 
lbl = Label(root, font=('calibri', 40, 'bold'),
            background='purple',
            foreground='white')
lbl.pack(anchor = 'center')
clock_tick() 
root.title("Digital Clock")
root.geometry("340x100")
root.resizable(False,False)
root.mainloop() #this is the loop you are looking for instead of the while loop

Pętla jest błędna. W przypadku TKININ znajduje się wbudowana pętla, która jest znacznie lepsza do użycia. Wyjście z tym z X zapewni czystym wyjściem, jeśli ustawisz pętlę za pomocą roota.mainloop (). Oto dobry przykład tego, co próbujesz zrobić https://www.geeksforgeeks.org/Python-Create -A-cyfrowy-zegarowy-przy użyciu-tkinter /

0
Brett Lapierre 27 październik 2020, 16:25