Tkinter - 介绍
什么是Tkinter?
Tkinter是Python的标准GUI库——它是构建在Tcl/Tk(一个成熟的跨平台窗口工具包)之上的一个轻量级面向对象层。它随每个标准Python发行版一起提供,无需额外安装。
使用Tkinter,您可以构建窗口、对话框、表单、数据录入工具、可视化图表以及完整的桌面应用程序,而且这些应用只需一套代码即可在Windows、macOS和Linux上运行。
import tkinter as tk
from tkinter import ttk
def greet():
label.config(text=f"Hello, {name.get()}!")
root = tk.Tk()
root.title("Hello Tkinter")
root.geometry("300x120")
name = tk.StringVar()
ttk.Entry(root, textvariable=name).pack(pady=12)
ttk.Button(root, text="Greet", command=greet).pack()
label = ttk.Label(root, text="")
label.pack(pady=8)
root.mainloop()
这段代码是一个经典的 Tkinter 入门示例,创建了一个简单的图形界面应用程序。下面逐部分分析:
1. 导入模块
import tkinter as tk
from tkinter import ttk
tkinter as tk:导入标准 GUI 库并简写为tk,包含基础组件(窗口、事件循环等)。from tkinter import ttk:导入 主题化组件库(Themed Tkinter),提供更现代、更美观的控件(如带主题的按钮、输入框等),并自动适配操作系统风格。
2. 定义回调函数
def greet():
label.config(text=f"Hello, {name.get()}!")
- 当按钮被点击时执行。
- 从
StringVar变量name中获取输入框的内容(name.get())。 - 通过
label.config(text=...)更新标签的显示文本。
3. 创建主窗口
root = tk.Tk()
root.title("Hello Tkinter")
root.geometry("300x120")
tk.Tk():创建应用程序的主窗口(根窗口)。title():设置窗口标题。geometry():设置窗口初始大小为 300×120 像素。
4. 创建控件
name = tk.StringVar()
ttk.Entry(root, textvariable=name).pack(pady=12)
ttk.Button(root, text="Greet", command=greet).pack()
label = ttk.Label(root, text="")
label.pack(pady=8)
| 控件 | 说明 |
|---|---|
StringVar() |
Tkinter 的字符串变量,用于双向绑定——输入框内容变化时变量同步更新,反之亦然。 |
ttk.Entry |
单行文本输入框,textvariable=name 将其与 name 变量绑定。 |
ttk.Button |
按钮,text 为显示文字,command=greet 指定点击时调用的函数。 |
ttk.Label |
标签,初始文本为空,后续通过 config() 动态更新。 |
布局管理器 .pack()
- 按顺序 从上到下 垂直排列控件。
pady参数添加垂直方向的外边距(上下各指定像素),让控件之间不拥挤。
5. 启动事件循环
root.mainloop()
- 进入 事件循环,程序开始监听并响应用户操作(点击按钮、输入文本、窗口缩放等)。
- 这是 GUI 应用程序的"发动机",调用后窗口才会显示并保持响应,直到用户关闭窗口。
程序运行效果
- 窗口标题为 "Hello Tkinter",大小 300×120。
- 顶部有一个输入框,用户可以输入名字。
- 中间有一个 "Greet" 按钮。
- 底部有一个标签(初始空白)。
- 点击按钮后,标签显示
Hello, [输入的名字]!。
代码结构总览
导入模块
↓
定义 greet() 回调函数
↓
创建根窗口 → 设置标题/大小
↓
创建 StringVar 变量
↓
依次创建并布局:输入框 → 按钮 → 标签
↓
启动 mainloop() 事件循环
补充说明
- 这里所有控件都直接在根窗口上
pack(),没有使用容器框架,适用于简单布局。 - 如果需要更复杂的布局,可以考虑
grid()或place()布局管理器,或使用ttk.Frame作为容器分组。 StringVar还提供了.set()方法,可用于程序主动修改输入框或标签的内容。
版本
这段文档面向 Python 3.8 及以上版本,并配合 Tk 8.6 使用。大多数示例在更早版本中也能运行,但部分功能(如 ttk.Spinbox)需要 Tk 8.6 的支持。

浙公网安备 33010602011771号