时钟显示
1.1、Tkinter是什么?
Tkinter是Python自带的GUI库,Python的IDEL就是Tkinter的应用实例。Tkinter可以看作是Tk和inter的合体。词根inter之意不言自明,而Tk则是工具控制语言Tcl(Tool Command Language)的一个图形工具箱的扩展,它提供各种标准的GUI接口。和其他GUI库相比,Tkinter有一个与生俱来的优势:无需安装就可以直接使用。当然,也有很多人——曾经我也是其中之一,认为这恰是Tkinter的唯一优点。不过,后来我改变了看法。相较于wx或Qt多如牛毛的控件和组件,Tk只用十几个控件就可以满足几乎所有的应用需求,用最低的学习成本、最简单的方式解决问题,这不正是实用至上主义的典范吗?
1.2、Tkinter的组织架构
Tkinter模块提供了一个名为Tk的窗体类、十几个基本控件,多个类型对象,若干常量,以及一个可选主题的控件包ttk和各种对话框组件。可以把ttk理解为增强的控件包,它提供了更多、更美观的控件。Tkinter模块的组织架构如下图所示。
2、时钟例程
from tkinter import *
import time
class App:
def __init__(self, master):
self.master = master
self.current_window = "time" # 默认界面1,显示时间
self.create_widgets()
def create_widgets(self):
# 切换按钮
self.switch_button = Button(self.master, text="Switch", command=self.switch_windows)
self.switch_button.pack()
# 界面1:显示时间
self.time_label = Label(self.master, text="", font=("Arial", 95), fg="white", bg="black")
self.time_label.pack(fill=BOTH, expand=True)
# 界面2:显示日期
self.date_label = Label(self.master, text="", font=("Arial", 65), fg="white", bg="black")
self.date_label.pack(fill=BOTH, expand=True)
# 刷新时间和日期
self.update_datetime()
def update_datetime(self):
if self.current_window == "time":
# 更新时间
current_time = time.strftime("%H:%M:%S")
self.time_label.config(text=current_time)
self.master.after(1000, self.update_datetime) # 每秒钟更新一次时间
elif self.current_window == "date":
# 更新日期
current_date = time.strftime("%Y-%m-%d")
self.date_label.config(text=current_date)
self.master.after(1000, self.update_datetime) # 每秒钟更新一次日期
def switch_windows(self):
if self.current_window == "time":
# 切换到界面2
self.time_label.pack_forget()
self.date_label.pack(fill=BOTH, expand=True)
self.current_window = "date"
elif self.current_window == "date":
# 切换到界面1
self.date_label.pack_forget()
self.time_label.pack(fill=BOTH, expand=True)
self.current_window = "time"
root = Tk()
root.geometry("500x180")
root.title("Window Example")
app = App(root)
root.mainloop()