Tkinter 简介
Tkinter 是 Python 的标准 GUI(图形用户界面)库,它内置在 Python 的安装包中,无需额外安装,是学习 GUI 编程的绝佳起点。

(图片来源网络,侵删)
核心思想: Tkinter 通过创建和配置各种“组件”(Widget,如按钮、标签、输入框等)来构建界面,并将这些组件组织在一个“主窗口”(Root Window)中。
第一步:创建一个主窗口
所有 Tkinter 应用都必须从一个主窗口开始,这个窗口是所有其他组件的容器。
import tkinter as tk
# 1. 创建一个主窗口
# root 是一个约定俗成的变量名,代表整个应用的根窗口
root = tk.Tk()
# 2. 设置窗口标题"我的第一个 Tkinter 窗口")
# 3. 设置窗口大小
# 格式为 "宽度x高度"
root.geometry("400x300")
# 4. 运行主事件循环
# 这行代码会启动窗口,并让它持续显示,等待用户事件(如点击、输入)
root.mainloop()
如何运行:
- 将以上代码保存为
app.py文件。 - 在终端或命令行中运行
python app.py。
你会看到:为“我的第一个 Tkinter 窗口”,大小为 400x300 像素的空白窗口。

(图片来源网络,侵删)
第二步:添加基本组件(Widget)
让我们在窗口里放一些东西,最常见的组件有:
- Label (标签): 用于显示文本或图像。
- Button (按钮): 用于触发一个动作。
- Entry (输入框): 用于让用户输入单行文本。
import tkinter as tk
root = tk.Tk()"组件示例")
root.geometry("400x300")
# --- 创建组件 ---
# 1. 创建一个标签
# text: 显示的文本
# fg: 前景色 (foreground)
# bg: 背景色 (background)
# font: 字体
label = tk.Label(root, text="你好,Tkinter!", fg="blue", bg="lightgray", font=("Arial", 20))
# 2. 创建一个按钮
# command: 当按钮被点击时,要调用的函数
def on_button_click():
print("按钮被点击了!")
# 也可以改变标签的文本
label.config(text="你点击了按钮!")
button = tk.Button(root, text="点击我", command=on_button_click, bg="green", fg="white")
# 3. 创建一个输入框
entry = tk.Entry(root, width=30, font=("Arial", 12))
entry.insert(0, "请在这里输入...") # 预设文本
# --- 将组件放置到窗口中 ---
# .pack() 是最简单的布局管理器,它会按顺序垂直排列组件
label.pack(pady=20) # pady=20 表示在上下各留出20像素的间距
entry.pack(pady=10)
button.pack(pady=10)
root.mainloop()
新知识点:
tk.Label(...),tk.Button(...),tk.Entry(...): 创建不同类型的组件。command参数: 这是按钮的灵魂,它指定一个函数,当按钮被点击时,该函数就会被执行。.pack(): 这是 Tkinter 的三种布局管理器之一,它会将组件按添加顺序从上到下(或从左到右)堆叠起来。pady是pack的一个选项,用于控制垂直方向的间距。
第三步:布局管理
当窗口变大变复杂时,.pack() 就不够用了,Tkinter 提供了更强大的布局管理器。
grid() - 网格布局
grid() 将窗口划分为一个网格,你可以指定组件在第几行、第几列。

(图片来源网络,侵删)
import tkinter as tk root = tk.Tk()"网格布局示例") # 创建几个标签 label1 = tk.Label(root, text="用户名:") label2 = tk.Label(root, text="密码:") # 创建两个输入框 entry1 = tk.Entry(root) entry2 = tk.Entry(root, show="*") # show="*" 让输入的内容显示为星号,常用于密码 # 使用 grid 布局 # sticky="e" 表示组件在网格单元内靠东(右)对齐 label1.grid(row=0, column=0, sticky="e") entry1.grid(row=0, column=1, pady=5) label2.grid(row=1, column=0, sticky="e") entry2.grid(row=1, column=1, pady=5) root.mainloop()
新知识点:
grid(row=..., column=...): 指定组件所在的行和列(从0开始计数)。sticky="e": 控制组件在网格单元内的对齐方式。e=东(右),w=西(左),n=北(上),s=南(下)。
place() - 绝对定位
place() 允许你精确指定组件的像素坐标。
import tkinter as tk root = tk.Tk()"绝对定位示例") # 在坐标 (x=50, y=50) 的位置创建一个宽100、高50的按钮 button = tk.Button(root, text="精确放置的按钮") button.place(x=50, y=50) root.mainloop()
新知识点:
place(x=..., y=..., width=..., height=...): 直接指定组件的左上角坐标和大小。- 注意:
place()在窗口大小改变时不会自动调整,所以通常不推荐用于复杂的界面。
第四步:获取用户输入
GUI 的核心是交互,下面是一个完整的登录界面示例,展示如何获取输入框的值。
import tkinter as tk
from tkinter import messagebox # 导入消息框
def login():
"""登录按钮的回调函数"""
username = entry_username.get()
password = entry_password.get()
if username == "admin" and password == "123456":
messagebox.showinfo("成功", "登录成功!欢迎回来!")
else:
messagebox.showerror("错误", "用户名或密码错误!")
# --- 创建主窗口 ---
root = tk.Tk()"登录界面")
root.geometry("300x200")
# --- 组件 ---
tk.Label(root, text="用户名:").grid(row=0, column=0, padx=10, pady=10, sticky="e")
entry_username = tk.Entry(root)
entry_username.grid(row=0, column=1, padx=10, pady=10)
tk.Label(root, text="密码:").grid(row=1, column=0, padx=10, pady=10, sticky="e")
entry_password = tk.Entry(root, show="*")
entry_password.grid(row=1, column=1, padx=10, pady=10)
login_button = tk.Button(root, text="登录", command=login)
login_button.grid(row=2, column=0, columnspan=2, pady=20) # columnspan=2 让按钮跨越两列
# --- 运行 ---
root.mainloop()
新知识点:
.get(): 这是获取Entry(输入框)内容的关键方法。messagebox.showinfo(...)和messagebox.showerror(...): 创建弹出式消息框,用于向用户显示信息或错误。padx和pady: 在grid中,它们控制组件与网格单元边缘的水平和垂直间距。columnspan: 让一个组件跨越多列。
总结与进阶
核心要点回顾
- 导入库:
import tkinter as tk - 创建主窗口:
root = tk.Tk() - 创建组件:
组件 = tk.组件类型(容器, 参数...) - 布局组件: 使用
.pack(),.grid(), 或.place() - 运行主循环:
root.mainloop() - 事件处理: 使用
command参数或组件.bind("<事件>", 函数)。
常用组件一览
| 组件 | 描述 |
|---|---|
tk.Label |
显示文本或图像 |
tk.Button |
可点击的按钮 |
tk.Entry |
单行文本输入框 |
tk.Text |
多行文本输入框 |
tk.Checkbutton |
复选框 |
tk.Radiobutton |
单选按钮 |
tk.Scale |
滑动条 |
tk.Listbox |
列表框 |
tk.Canvas |
画布,用于绘制图形 |
tk.Frame |
框架,用于分组和布局其他组件 |
进阶学习路径
- 配置选项: 几乎所有组件都有丰富的配置选项(如
bg,fg,font,width,height,text,image等),通过查阅官方文档可以深入了解。 ttk模块:tkinter.ttk提供了外观更现代化的组件,建议在新项目中优先使用ttk的组件(如ttk.Button,ttk.Label),它们能更好地适应不同操作系统的主题。- 事件绑定: 除了
command,你还可以使用.bind()方法来响应更具体的事件,如<KeyPress>(键盘按下),<Button-1>(鼠标左键点击) 等。 - 构建复杂应用: 当应用变大时,学习使用面向对象编程(OOP)的方式,将每个窗口或功能模块封装成一个类,会使代码结构更清晰、更易于维护。
希望这份简明教程能帮助你顺利开启 Tkinter 的学习之旅!动手实践是掌握 GUI 编程最快的方式。
