点击上方“只会写BUG的程序猿”,选择“设为星标”
📈 学完本文你能做什么
✅ 独立创建带交互的桌面窗口
✅ 掌握核心组件和布局技巧
✅ 实现实时验证、快捷键等实用功能
1. ⏱️ 5分钟实战:做出你的第一个tkinter窗口
新手入门先从最核心的「根窗口」开始,掌握这几步,5分钟就能做出可运行的窗口✅
核心知识点铺垫
tkinter的窗口基于坐标系设计:以窗口左上角为原点(0,0),向右为x轴,向下为y轴。颜色支持多种格式:英文(red)、十六进制(#FF0000)、RGB(rgb(255,0,0))。
完整代码:创建第一个可运行窗口
# 导入tkinter库,简写为tk是行业惯例import tkinter as tkif __name__ == '__main__':# 1. 创建根窗口(整个应用的核心)root = tk.Tk()# 2. 配置窗口属性root.title("Rosszhang的tkinter窗口") # 窗口标题root.geometry("500x300+200+100") # 大小+位置(宽x高+横坐标+纵坐标)root.config(bg="#F0F8FF") # 背景色(浅蓝)# 3. 启动主循环(保持窗口运行)root.mainloop()
代码效果:屏幕上会出现一个500×300的浅蓝色窗口,位置在屏幕(200,100)处,标题栏显示「我的第一个tkinter窗口」。
💡 关键知识点:geometry("500x300+200+100") 里的+200+100,控制窗口在屏幕上的初始位置,可根据需要调整。
动手试试
修改窗口背景色为你喜欢的颜色(比如#FFE4E1),调整窗口大小为600x400,看看效果变化?

2. 🧩 认识tkinter核心组件:界面的"积木"
有了窗口,就该加「组件」丰富内容,这些是GUI界面的基础积木,先掌握最常用的4个👇
核心组件代码示例
import tkinter as tkroot = tk.Tk()root.title("常用组件展示")root.geometry("500x400")root.config(bg="#F0F8FF")# 1. 标签(Label):显示文字/图片label = tk.Label(root, text="👋 欢迎使用tkinter",font=("微软雅黑", 18), bg="#F0F8FF")label.pack(pady=10)# 2. 输入框(Entry):获取用户文本输入entry = tk.Entry(root, font=("微软雅黑", 14), width=30)entry.pack(pady=10)entry.insert(0, "请输入你的内容...") # 默认提示文字# 3. 框架(Frame):分组管理组件frame = tk.Frame(root, bg="white", bd=1, relief="solid")frame.pack(pady=10, padx=20, fill="x")# 4. 按钮(Button):触发交互事件def click_btn():label.config(text=f"你输入的是:{entry.get()}")button = tk.Button(frame, text="确认", font=("微软雅黑", 12),command=click_btn, bg="#4169E1", fg="white")button.pack(pady=8, padx=8)root.mainloop()
代码效果:窗口包含文字标签、输入框、带边框的框架和蓝色确认按钮,点击按钮会显示输入框内容。
⚠️ 注意事项:Entry组件用get()获取输入内容,insert()设置默认文字;Frame常用于给组件分组,让界面更整洁。
动手试试
给按钮新增一个功能:点击后清空输入框内容。提示:使用entry.delete(0, tk.END)实现清空。

3. 🧮 三种布局方式:精准摆放你的组件
tkinter有3种核心布局方式,用表格对比更清晰👇
布局方式 | 核心特点 | 适用场景 | 优点 | 缺点 |
pack() | 按添加顺序自动排列 | 简单布局、快速开发 | 代码少、易上手 | 精准定位难 |
grid() | 按行列网格排列 | 复杂表单、规整布局 | 定位精准、易维护 | 需规划行列 |
place() | 按坐标/比例定位 | 自定义精准布局 | 自由度最高 | 适配不同屏幕难 |
布局对比代码示例
import tkinter as tkroot = tk.Tk()root.title("三种布局方式对比")root.geometry("600x300")# 1. pack布局(上下排列)pack_frame = tk.Frame(root, bg="#FFE4E1")pack_frame.pack(side="left", fill="both", expand=True, padx=5, pady=5)tk.Label(pack_frame, text="pack布局\n(上下排列)", bg="#FFE4E1").pack(pady=20)tk.Button(pack_frame, text="按钮1").pack(pady=5)tk.Button(pack_frame, text="按钮2").pack(pady=5)# 2. grid布局(行列排列)grid_frame = tk.Frame(root, bg="#E0FFFF")grid_frame.pack(side="left", fill="both", expand=True, padx=5, pady=5)tk.Label(grid_frame, text="grid布局\n(2行2列)", bg="#E0FFFF").grid(row=0, column=0, columnspan=2, pady=10)tk.Button(grid_frame, text="按钮1").grid(row=1, column=0, padx=5, pady=5)tk.Button(grid_frame, text="按钮2").grid(row=1, column=1, padx=5, pady=5)# 3. place布局(坐标定位)place_frame = tk.Frame(root, bg="#F5F5DC")place_frame.pack(side="left", fill="both", expand=True, padx=5, pady=5)tk.Label(place_frame, text="place布局\n(坐标定位)", bg="#F5F5DC").place(x=60, y=20)tk.Button(place_frame, text="按钮1").place(x=50, y=80)tk.Button(place_frame, text="按钮2").place(x=120, y=80)root.mainloop()
代码效果:窗口被分成三部分,分别展示三种布局的效果,能直观看到不同布局的排列特点。
🤔 小测试:选择题
以下哪种布局最适合计算器界面? A. pack()B. grid()C. place() (答案在文末哦~)
动手试试
用grid()布局做一个2行3列的按钮矩阵,每行放3个按钮,看看行列对齐效果?

4. 🎮 事件绑定:让界面响应你的操作
tkinter支持多种事件绑定,除了按钮点击,还能绑定键盘、鼠标等操作👇
基础事件+快捷键绑定示例
import tkinter as tkroot = tk.Tk()root.title("事件绑定与快捷键")root.geometry("500x300")# 1. 按钮点击事件(基础)def btn_click(event=None): # 兼容快捷键传参label.config(text="✅ 按钮/快捷键触发成功!")# 2. 鼠标移动追踪def mouse_move(event):pos_label.config(text=f"鼠标位置:x={event.x}, y={event.y}")# 创建组件label = tk.Label(root, text="点击按钮或按Ctrl+S试试", font=("微软雅黑", 16))label.pack(pady=30)pos_label = tk.Label(root, text="", font=("微软雅黑", 12))pos_label.pack(pady=10)button = tk.Button(root, text="点击我", font=("微软雅黑", 14), command=btn_click)button.pack(pady=10)# 绑定快捷键(Ctrl+S)root.bind("<Control-s>", btn_click)# 绑定鼠标移动事件root.bind("<Motion>", mouse_move)root.mainloop()
代码效果: ✅ 点击按钮或按Ctrl+S,上方文字会更新 ✅ 移动鼠标,窗口会实时显示鼠标坐标 ✅ 实现了按钮点击和快捷键的双重触发
动手试试
新增一个快捷键「Ctrl+Q」,绑定关闭窗口的功能。提示:使用root.quit()实现关闭,绑定

5. 📊 变量监控:实现界面实时更新
tkinter的「变量类」(StringVar、IntVar等)能监控值的变化,实现界面内容实时更新👇
变量监控+密码验证实战
import tkinter as tkroot = tk.Tk()root.title("变量监控与密码验证")root.geometry("500x300")# 1. 创建监控变量pwd_var = tk.StringVar()tip_var = tk.StringVar()tip_var.set("请输入密码(要求:8位以上)")# 2. 定义监控函数(值变化时自动触发)def check_pwd(*args):pwd = pwd_var.get()if len(pwd) >= 8:tip_var.set("✅ 密码长度符合要求!")else:tip_var.set(f"❌ 密码过短(当前{len(pwd)}位,需8位以上)")# 3. 绑定变量监控pwd_var.trace_add("write", check_pwd)# 4. 创建界面组件tk.Label(root, text="密码验证", font=("微软雅黑", 18)).pack(pady=10)# 密码输入框(绑定监控变量)entry = tk.Entry(root, textvariable=pwd_var,font=("微软雅黑", 14), show="*", width=30)entry.pack(pady=10)# 提示标签(绑定监控变量)tip_label = tk.Label(root, textvariable=tip_var,font=("微软雅黑", 12), fg="red")tip_label.pack(pady=10)root.mainloop()
代码效果:输入密码时,下方提示文字会实时更新 ✅ 输入≥8位:显示密码符合要求 ❌ 输入<8位:显示当前长度和错误提示
💡 关键价值:trace_add("write", 函数)能监控变量值变化,无需点击按钮,输入过程中实时验证,提升用户体验。
动手试试
升级密码验证规则:要求包含数字+字母,修改check_pwd函数,实现更严格的密码验证。

🎯 实战挑战:用50行代码实现简易记事本
学完以上内容,来个实战挑战吧!
要求: 1. 包含文本输入框(支持多行输入) 2. 有「保存」和「清空」按钮 3. 保存按钮点击后,将内容写入txt文件 4. 总代码不超过50行
提示:用Text组件实现多行输入,open()函数保存文件。
关注我,下期带你手撸简易记事本