from tkinter import * import datetime import pytz # Definitions of time zones def main(): root = Tk() root.title("Digital Clock") root.geometry("400x120") panel = Frame(root) panel.pack(side=TOP, fill=X) tz = None # Timezone definition, None means local timezone timeZoneIdx = IntVar() # Control variable for the group of radio buttons def setTimeZone(): nonlocal tz n = timeZoneIdx.get() # print("setTimeZone: n =", n) if n == 1: # Moscow tz = pytz.timezone("Europe/Moscow") elif n == 2: # Shanghai tz = pytz.timezone("Asia/Shanghai") else: tz = None redraw() localTime = Radiobutton( panel, text="Local time", variable=timeZoneIdx, value=0, command=setTimeZone ) moscowTime = Radiobutton( panel, text="Moscow", variable=timeZoneIdx, value=1, command=setTimeZone ) shanghaiTime = Radiobutton( panel, text="Shanghai", variable=timeZoneIdx, value=2, command=setTimeZone ) localTime.pack(side=LEFT, padx=4, pady=4) moscowTime.pack(side=LEFT, padx=4, pady=4) shanghaiTime.pack(side=LEFT, padx=4, pady=4) drawArea = Canvas(root, bg="silver") drawArea.pack(side=TOP, expand=True, fill=BOTH) def drawTime(): dt = datetime.datetime.now(tz) txt = "{0:02d}:{1:02d}:{2:02d}".format( dt.hour, dt.minute, dt.second ) w = drawArea.winfo_width() h = drawArea.winfo_height() drawArea.create_text( w/2, h/2, anchor=CENTER, text=txt, font=("Times", 32) ) def redraw(): drawArea.delete("all") drawTime() def animate(): redraw() drawArea.after(1000, animate) drawArea.bind("", lambda e: redraw()) root.update() timeZoneIdx.set(0) drawTime() drawArea.after(100, animate) root.mainloop() if __name__ == "__main__": main()