Python Tkinter 基础详解
Tkinter 是 Python 自带的标准GUI图形界面库,无需额外安装,直接导入即可使用,适合做简单桌面软件、窗口、按钮、输入框等。
注意:正确拼写是 Tkinter (Python2)/ tkinter(Python3,小写t),下面统一用 Python3 语法。
一、基础使用流程(固定4步)
- 导入库:
import tkinter as tk - 创建主窗口:
root = tk.Tk() - 放置组件+设置属性
- 消息循环:
root.mainloop()(必须最后一行,让窗口持续显示)
最简示例
python
import tkinter as tk
# 1. 创建主窗口
root = tk.Tk()
root.title("我的第一个窗口") # 窗口标题
root.geometry("400x300") # 窗口大小:宽x高
# 2. 运行窗口
root.mainloop()
二、主窗口常用属性
python
root.title("标题") # 窗口标题
root.geometry("宽x高+x偏移+y偏移") # 例:400x300+100+50
root.resizable(False, False) # 禁止缩放(宽,高)
root.config(bg="white") # 背景颜色
root.iconbitmap("图标.ico") # 窗口图标(仅Windows)
三、常用基础组件(核心)
1. 标签 Label(显示文本/图片,不可交互)
python
label = tk.Label(root,
text="我是标签",
font=("微软雅黑",14), # 字体、大小
bg="#f0f0f0", # 背景色
fg="red", # 文字颜色
width=20, height=3) # 宽高(字符单位)
label.pack() # 布局显示
2. 按钮 Button(点击触发函数)
python
def click():
print("按钮被点击了")
btn = tk.Button(root, text="点我", command=click)
btn.pack()
command=函数名:点击执行函数,不要加括号
3. 单行输入框 Entry(输入文本)
python
entry = tk.Entry(root, width=30)
entry.pack()
# 获取输入内容
def get_text():
text = entry.get()
print(text)
tk.Button(root, text="获取", command=get_text).pack()
4. 多行文本框 Text
python
text = tk.Text(root, width=40, height=5)
text.pack()
# 插入文字
text.insert(tk.END, "默认文字\n第二行")
# 获取全部内容
content = text.get(1.0, tk.END)
5. 框架 Frame(容器,用来分组布局)
python
frame = tk.Frame(root, bg="gray", padx=10, pady=10)
frame.pack()
# 组件放在Frame里
tk.Label(frame, text="分组内标签").pack()
6. 复选框 Checkbutton
python
var = tk.IntVar() # 绑定变量,1选中,0未选中
cb = tk.Checkbutton(root, text="同意协议", variable=var)
cb.pack()
7. 单选框 Radiobutton
python
var = tk.StringVar()
r1 = tk.Radiobutton(root, text="男", variable=var, value="男")
r2 = tk.Radiobutton(root, text="女", variable=var, value="女")
r1.pack()
r2.pack()
四、三大布局管理器(重中之重)
Tkinter 必须用布局方式把组件放到窗口上,三选一:
1. pack() 流式布局(最简单,从上到下/从左到右)
python
widget.pack(
side=tk.LEFT, # LEFT/RIGHT/TOP/BOTTOM
padx=10, pady=5, # 外边距
fill=tk.X, # 横向填充
expand=True # 拉伸占满剩余空间
)
2. grid() 网格布局(最常用,表格形式)
python
widget.grid(
row=0, column=0, # 行、列,从0开始
padx=5, pady=5,
sticky="nsew" # 对齐:n上s下w左e右
)
3. place() 绝对布局(指定坐标)
python
widget.place(x=50, y=100, width=100, height=30)
五、变量绑定(自动更新)
Tkinter 自带专用变量,组件可直接绑定,自动同步:
tk.StringVar()字符串tk.IntVar()整数tk.BooleanVar()布尔tk.DoubleVar()小数
示例:标签文字动态更新
python
import tkinter as tk
root = tk.Tk()
var = tk.StringVar(value="初始文字")
tk.Label(root, textvariable=var).pack()
def change():
var.set("文字变了!")
tk.Button(root, text="修改", command=change).pack()
root.mainloop()
六、弹窗(消息框 messagebox)
python
import tkinter.messagebox as msg
msg.showinfo("提示", "普通信息")
msg.showwarning("警告", "警告信息")
msg.showerror("错误", "出错了")
res = msg.askyesno("确认", "是否继续?") # 返回True/False
七、简单完整综合案例
python
import tkinter as tk
import tkinter.messagebox as msg
root = tk.Tk()
root.title("简易登录界面")
root.geometry("300x200")
# 标签
tk.Label(root, text="用户名:").place(x=50, y=30)
tk.Label(root, text="密码:").place(x=50, y=70)
# 输入框
user = tk.Entry(root, width=20)
pwd = tk.Entry(root, width=20, show="*") # 密码隐藏
user.place(x=120, y=30)
pwd.place(x=120, y=70)
# 登录函数
def login():
u = user.get()
p = pwd.get()
if u == "admin" and p == "123456":
msg.showinfo("成功", "登录成功!")
else:
msg.showerror("失败", "账号或密码错误")
# 按钮
tk.Button(root, text="登录", command=login, width=10).place(x=100, y=120)
root.mainloop()
八、学习重点总结
- 固定结构:
导入→创建窗口→组件→布局→mainloop() - 布局优先学 grid(),最实用;简单窗口用 pack()
- 按钮绑定函数用
command=函数名,不带括号 - 动态内容用
StringVar等专用变量 - 颜色支持英文(red/white)或十六进制(#ffffff)