Форум сайта python.su
Здравствуйте! Нужна помощь! Написал простейшие цифровые часы на базе прозрачного окна “tkinter”. В основе программы лежит зацикленная сама на себя (самозацикленная) функция “tick”. Вот она и сопутствующие ей глобальные переменные:
from threading import Timer from datetime import datetime sep = ' : ' quit_sys = 0 hour = datetime.now().hour minute = datetime.now().minute def tick(): global sep global out_clock global quit_sys global minute global hour if quit_sys == 0: if round(datetime.now().second) != 0: if sep == ' : ': out_clock = out_clock.replace(sep, ' ', 1) text_clock.delete(1.0, END) text_clock.insert(1.0, out_clock, 'clock') sep = ' ' else: out_clock = out_clock.replace(sep, ' : ') text_clock.delete(1.0, END) text_clock.insert(1.0, out_clock, 'clock') sep = ' : ' else: minute = datetime.now().minute hour = datetime.now().hour check_zero() if minute == 0 and hour == 0: day = datetime.now().day mounth = mounts_dict[datetime.now().month] year = datetime.now().year day_week = week_dict[datetime.now().weekday()] out_calend = f"{day} {mounth} {year}\n{day_week}" text_calendar.delete(1.0, END) text_calendar.insert(1.0, out_calend, 'clock') out_clock = f"{hour}{sep}{minute}" text_clock.delete(1.0, END) text_clock.insert(1.0, out_clock, 'clock') else: out_clock = f"{hour}{sep}{minute}" text_clock.delete(1.0, END) text_clock.insert(1.0, out_clock, 'clock') Timer(1, tick).start()
Отредактировано Olezhka (Дек. 28, 2022 18:47:28)
Офлайн
Olezhkaчто нибудь читал про потоки?
Почему каждую секунду нарастает объем используемой программой ОЗУ?
Офлайн
xam1816Нет. Ты лучше скажи, использование “root.after” вместо “Timer” решит проблему?
Офлайн
проверь
import tkinter as tk import datetime def show_time(): t = datetime.datetime.now() sv.set(f'{t.hour}:{t.minute:02}:{t.second:02}') root.after(1000, show_time) root = tk.Tk() sv = tk.StringVar() lbl = tk.Label(textvariable=sv, font='Arial 32 bold') lbl.pack() show_time() root.mainloop()
Офлайн
xam1816Спасибо! А что такое “:02” в минутах и секундах? И почему метод “Timer” из “threading” так жрал память?
import tkinter as tk
import datetime
def show_time():
t = datetime.datetime.now()
sv.set(f'{t.hour}:{t.minute:02}:{t.second:02}')
root.after(1000, show_time)
root = tk.Tk()
sv = tk.StringVar()
lbl = tk.Label(textvariable=sv, font='Arial 32 bold')
lbl.pack()
show_time()
root.mainloop()
Офлайн
Olezhka
И почему метод “Timer” из “threading” так жрал память?
Timer(1, tick).start()
Olezhkaчитай про форматирование строк
А что такое “:02”
Офлайн
xam1816Ясно! Спасибо за ответ!
Офлайн