第 47 课 · 阶段八 · 项目实战
图形界面:Tkinter
Tkinter 是 Python 自带的图形界面库,无需额外安装。这一课做出第一个窗口、认识常用控件,并手写一个计算器。
🎯 学完本课你将掌握
- 创建 Tkinter 窗口与控件
- 掌握 pack/grid 布局
- 绑定按钮事件
- 完成一个图形化计算器
一、Tkinter 是什么
Tkinter 是 Python 自带的 GUI 库,无需 pip 安装,适合做桌面小工具、教学演示。虽然外观朴素,但胜在零依赖、易上手。
二、第一个窗口
第一个窗口.py
1import tkinter as tk23win = tk.Tk()4win.title("我的第一个窗口")5win.geometry("400x300")6win.mainloop() # 进入事件循环,保持窗口显示三、标签与按钮
标签按钮.py
1import tkinter as tk23def click():4 label.config(text="你点了按钮!")56win = tk.Tk()7win.title("控件演示")8label = tk.Label(win, text="你好,Tkinter", font=("微软雅黑", 16))9label.pack(pady=20)10btn = tk.Button(win, text="点我", command=click)11btn.pack()12win.mainloop()四、输入框 Entry
输入框.py
1import tkinter as tk23def show():4 print("输入了:", entry.get())56win = tk.Tk()7entry = tk.Entry(win, width=20)8entry.pack(pady=10)9tk.Button(win, text="获取输入", command=show).pack()10win.mainloop()五、两种布局:pack 与 grid
grid 布局.py
1import tkinter as tk23win = tk.Tk()4# 用 grid 排布(行、列)5for r in range(3):6 for c in range(3):7 tk.Button(win, text=f"{r},{c}", width=6, height=28 ).grid(row=r, column=c)9win.mainloop()六、实战:图形化计算器
计算器.py
1import tkinter as tk23def click(ch):4 cur = entry.get()5 if ch == "=":6 try:7 result = eval(cur) # 计算表达式8 entry.delete(0, tk.END)9 entry.insert(0, str(result))10 except Exception:11 entry.delete(0, tk.END)12 entry.insert(0, "错误")13 elif ch == "C":14 entry.delete(0, tk.END)15 else:16 entry.insert(tk.END, ch)1718win = tk.Tk()19win.title("计算器")20entry = tk.Entry(win, width=18, font=("Arial", 18), justify="right")21entry.grid(row=0, column=0, columnspan=4, padx=5, pady=5)2223buttons = [24 "7", "8", "9", "/",25 "4", "5", "6", "*",26 "1", "2", "3", "-",27 "C", "0", "=", "+",28]29for i, ch in enumerate(buttons):30 r, c = i // 4 + 1, i % 431 tk.Button(win, text=ch, width=5, height=2,32 command=lambda x=ch: click(x)33 ).grid(row=r, column=c, padx=2, pady=2)34win.mainloop()⚠️ 注意
示例中的 eval() 会把输入当代码执行,仅用于学习演示。真实软件绝不能用 eval 处理用户输入(有安全风险)。
七、常见错误与解决
常见错误与解决
| 错误现象 | 原因 / 解决方法 |
|---|---|
窗口一闪而过 | 确认代码末尾有 win.mainloop(),它负责保持窗口。 |
控件不显示 | 布局函数 pack/grid/place 至少要调用一个。 |
按钮点了没反应 | command 要传函数名不带括号,如 command=click 而非 click()。 |
✍️ 小练习
做一个简易“待办清单”:输入框输入内容,点击添加后显示到列表框,点击删除移除选中项。
📌 本节小结
Tkinter 三步:创建窗口 → 摆控件(pack/grid)→ 绑定事件(command)。用它能快速做出桌面小工具,是很多人第一个 GUI 的起点。