第 47 课 · 阶段八 · 项目实战

图形界面:Tkinter

Tkinter 是 Python 自带的图形界面库,无需额外安装。这一课做出第一个窗口、认识常用控件,并手写一个计算器。

第 47 课阶段八 · 项目实战难度:进阶建议时长:45 分钟关键词:Tkinter · 控件 · 布局 · 事件

🎯 学完本课你将掌握

  • 创建 Tkinter 窗口与控件
  • 掌握 pack/grid 布局
  • 绑定按钮事件
  • 完成一个图形化计算器

一、Tkinter 是什么

Tkinter 是 Python 自带的 GUI 库,无需 pip 安装,适合做桌面小工具、教学演示。虽然外观朴素,但胜在零依赖、易上手。

二、第一个窗口

第一个窗口.py
1import tkinter as tk
2
3win = tk.Tk()
4win.title("我的第一个窗口")
5win.geometry("400x300")
6win.mainloop() # 进入事件循环,保持窗口显示

三、标签与按钮

标签按钮.py
1import tkinter as tk
2
3def click():
4 label.config(text="你点了按钮!")
5
6win = 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 tk
2
3def show():
4 print("输入了:", entry.get())
5
6win = 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 tk
2
3win = 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=2
8 ).grid(row=r, column=c)
9win.mainloop()

六、实战:图形化计算器

计算器.py
1import tkinter as tk
2
3def 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)
17
18win = 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)
22
23buttons = [
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 % 4
31 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 的起点。