范例 - Label 制作时钟
这篇教学会使用 tkinter 的 Label 标签,搭配标签的文字变数应用,制作一个简单的时钟,最后还会搭配 Python 的 datetime 函数库,制作出同时显示不同时区时间的时钟。
快速导览:
因为 Google Colab 不支援 tkinter,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda )。
制作时钟,显示台湾本地时间
延伸“加入 Label 标签”文章范例,根据下列重点撰写时钟的程序:
- 加载 datetime 函数库,使用 datetime.timezone 设定时区 ( 参考 timezone )。
- 使用 tk.StringVar() 建立文字变数。
- 建立 showTime 函数:
- 使用 datetime.datetime.now 读取目前时间,转换成 H:M:S 格式 ( 参考 datetime )。
- 使用 set() 方法,更新 tk 文字变数内容。
- 使用 after() 方法,让视窗每隔 1000 毫秒执行一次 showTime 函数。
- 使用 Label 方法在视窗中加入两个 Label,第二个时间的 Lable 设定 textvariable 参数,使其能动态显示内容。
import tkinter as tk
import datetime
GMT = datetime.timezone(datetime.timedelta(hours=8)) # 設定所在時區 ( 台灣是 GMT+8 )
root = tk.Tk() # 建立視窗物件
root.title('oxxo.studio') # 設定視窗標題
root.geometry('200x200') # 設定視窗大小
a = tk.StringVar() # 建立文字變數
# 建立不斷改變文字變數的函式
def showTime():
now = datetime.datetime.now(tz=GMT).strftime('%H:%M:%S') # 取得目前的時間,格式使用 H:M:S
a.set(now) # 設定變數內容
root.after(1000, showTime) # 視窗每隔 1000 毫秒再次執行一次 showTime()
tk.Label(root, text='目前時間', font=('Arial',20)).pack() # 放入第一個 Label 標籤
tk.Label(root, textvariable=a, font=('Arial',20)).pack() # 放入第二個 Label 標籤,內容是 a 變數
showTime() # 執行函式
root.mainloop()
世界时钟,同时显示不同时区时间
了解显示时间的原理后,便可以开始设计可以同时显示不同时区时间的“世界时钟”,程序设计的重点如下:
- 定义 timezone 函数,负责产生不同时区的时间。
- 新增 name 和 loc_time 变数,内容是四个时区的名称和 GMT 数字所组成的串列。
- 使用串列生成式,产生一个内容包含四个 tk 文字变数的串列。
- 修改 showTime 函数,因为有四个时区,使用 for 循环执行四次,并更新文字变数。
- 因为有四个时区,使用 for 循环执行四次,总共产生八个 Label。
import tkinter as tk
import datetime
# 定義產生不同時區時間的函式
def timezone(h):
GMT = datetime.timezone(datetime.timedelta(hours=h)) # 取得時區
now = datetime.datetime.now(tz=GMT).strftime('%H:%M:%S') # 取得該時區的時間
return now
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x300')
name = ['倫敦','台灣','日本','紐約'] # 四個時區的名稱串列
loc_time = [1,8,9,-4] # 四個時區的 GMT 數字
arr = [tk.StringVar() for i in range(4)] # 使用串列生成式,產生一個內容包含四個 tk 文字變數的串列
# 定義顯示時間的函式
def showTime():
# 因為有四個時區,使用 for 迴圈執行四次
for i in range(4):
arr[i].set(timezone(loc_time[i])) # 設定文字變數
root.after(1000, showTime) # 視窗每隔 1000 毫秒再次執行一次 showTime()
# 因為有四個時區,使用 for 迴圈執行四次
for i in range(4):
# 依序加入不同時區的名稱與時間
tk.Label(root, text=name[i], font=('Arial',20)).pack()
tk.Label(root, textvariable=arr[i], font=('Arial',20)).pack()
showTime()
root.mainloop()
微信扫码关注
抖音扫码关注