Форум сайта python.su
0
Здравствуйте! Нужна помощь! Написал простейшие цифровые часы на базе прозрачного окна “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)
Офлайн
124
Olezhkaчто нибудь читал про потоки?
Почему каждую секунду нарастает объем используемой программой ОЗУ?
Офлайн
0
xam1816Нет. Ты лучше скажи, использование “root.after” вместо “Timer” решит проблему?
Офлайн
124
проверь
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()
Офлайн
0
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()
Офлайн
124
Olezhka
И почему метод “Timer” из “threading” так жрал память?
Timer(1, tick).start()
Olezhkaчитай про форматирование строк
А что такое “:02”
Офлайн
0
xam1816Ясно! Спасибо за ответ!
Офлайн