#python #tkinter #clock
#python #tkinter #часы
Вопрос:
В общем, я пытаюсь создать цифровые часы на python, которые будут отображаться в маленьком окне при запуске программы. У меня было две идеи о том, как их создать, но приведенный ниже код тот же. Моя проблема в том, что если я использую time.sleep
команду, при запуске программы окно даже не появляется, но если я использую root.after(1000, clock(root, w)
, появляется окно, но оно создает 1000 меток, выдавая ошибку «превышена глубина рекурсии». Любая помощь?
import time as t
import tkinter as tk
from datetime import datetime
def main():
root = tk.Tk()
root.title("Digital Clock")
w = tk.Label(font = (100))
w.pack()
clock(root, w)
root.mainloop()
def clock(root, w):
t.sleep(1)
timelabeled = " "
now = datetime.now()
timelabeled = ("%s/%s/%s %s:%s:%s" % (now.day, now.month, now.year, now.hour, now.minute, now.second))
w.config(text = timelabeled, )
root.after(clock(root, w))
if __name__ == "__main__":
main()
Предполагается, что моим результатом будет небольшое окно с меткой, представляющей время, которое обновляется каждую секунду, но это не то, что я получаю. Либо я ничего не получаю, либо 1000 меток, которые не обновляются.
Комментарии:
1. Проблема с 1000 метками связана с тем, что вы работаете
clock(root, w)
внутриclock
функции — бесконечная рекурсия.
Ответ №1:
Вы могли бы просто использовать root.after
для повторения функции каждые 1 секунду. Режим ожидания не требуется.
import tkinter as tk
from datetime import datetime
root = tk.Tk()
root.title("Digital Clock")
def clock():
now = datetime.now()
timelabeled = ("%s/%s/%s %s:%s:%s" % (now.day, now.month, now.year, now.hour, now.minute, now.second))
w.config(text = timelabeled, )
root.after(1000,clock)
w = tk.Label(font = (100))
w.pack()
clock()
root.mainloop()
Комментарии:
1. так что, я думаю, моя проблема была с «основным». Как только я удалил «def main ()», как и в вашем коде, все работало безупречно. Можете ли вы объяснить, почему это произошло? Понятия не имею… Заранее спасибо!
2. это проблема области и не обязательно связана с tkinter. В принципе, вы не можете просто передавать локальные переменные вокруг разных функций — вам нужно объявить глобальные или вместо этого использовать ООП.
Ответ №2:
Это просто простые часы, использующие модуль Tkinter для просмотра программного обеспечения:
from tkinter import *
from time import strftime
root=Tk()
root.title("clock")
def time():
string=strftime("%H: %M: %S: %p")
label.configure(text=string)
label.after(1000, time)
label=Label(root, font=("Arial Black", 40),bg="black", fg="white")
label.pack(anchor="center")
time()
root.mainloop()