在 Python 中,tkinter 是标准的 GUI(图形用户界面)库,用于创建桌面应用程序。它基于 Tcl/Tk 工具包,简单易用,适合初学者和快速原型开发。
以下是 tkinter 中常用组件(widgets)及其基本用法介绍:
一、基础结构
import tkinter as tk
root = tk.Tk() # 创建主窗口
root.title("窗口标题")
root.geometry("400x300") # 设置窗口大小
# 在这里添加组件...
root.mainloop() # 进入事件循环
二、常用组件(Widgets)
1. Label(标签)
用于显示文本或图像。
label = tk.Label(root, text="这是一个标签", font=("Arial", 12))
label.pack()
常用参数:text, font, fg(前景色), bg(背景色), image
2. Button(按钮)
可绑定点击事件。
def on_click():
print("按钮被点击了!")
button = tk.Button(root, text="点击我", command=on_click)
button.pack()
command 指定回调函数。
3. Entry(单行文本输入框)
entry = tk.Entry(root, width=30)
entry.pack()
# 获取内容
content = entry.get()
# 清空内容
entry.delete(0, tk.END)
常用于用户名、密码等单行输入。
4. Text(多行文本框)
text = tk.Text(root, height=5, width=40)
text.pack()
# 插入内容("1.0" 表示第1行第0列)
text.insert("1.0", "默认文本")
# 获取全部内容(从 "1.0" 到 END)
content = text.get("1.0", tk.END)
支持富文本(通过 tag 实现颜色、字体等),但不如专业编辑器强大。
5. Checkbutton(复选框)
var = tk.BooleanVar()
check = tk.Checkbutton(root, text="同意条款", variable=var)
check.pack()
# 获取状态:var.get() → True/False
也可使用 IntVar()(0/1)。
6. Radiobutton(单选按钮)
choice = tk.StringVar(value="A")
rb1 = tk.Radiobutton(root, text="选项A", variable=choice, value="A")
rb2 = tk.Radiobutton(root, text="选项B", variable=choice, value="B")
rb1.pack()
rb2.pack()
# 当前选择:choice.get()
同一组 Radiobutton 必须共享同一个 variable。
7. Listbox(列表框)
listbox = tk.Listbox(root, height=5)
listbox.insert(1, "苹果")
listbox.insert(2, "香蕉")
listbox.insert(3, "橙子")
listbox.pack()
# 获取选中项
selection = listbox.curselection() # 返回索引元组,如 (1,)
if selection:
item = listbox.get(selection[0])
可配合 Scrollbar 使用。
8. Combobox(下拉选择框)
需要从 ttk(themed tkinter)导入
from tkinter import ttk
combo = ttk.Combobox(root, values=["北京", "上海", "广州"])
combo.set("请选择城市") # 默认值
combo.pack()
# 获取当前选择
selected = combo.get()
9. Scale(滑动条)
def on_scale(val):
print(f"当前值: {val}")
scale = tk.Scale(root, from_=0, to=100, orient=tk.HORIZONTAL, command=on_scale)
scale.pack()
orient 可为 HORIZONTAL 或 VERTICAL。
10. Scrollbar(滚动条)
通常与 Text、Listbox、Canvas 等配合使用:
text = tk.Text(root, yscrollcommand=scrollbar.set)
scrollbar = tk.Scrollbar(root, command=text.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
11. Frame(容器框架)
用于组织其他组件,实现布局分组:
frame = tk.Frame(root, bg="lightgray", padx=10, pady=10)
frame.pack()
tk.Button(frame, text="按钮1").pack()
tk.Button(frame, text="按钮2").pack()
12. Message / messagebox(消息对话框)
用于弹出提示、警告、确认框(属于 tkinter.messagebox):
from tkinter import messagebox
messagebox.showinfo("提示", "操作成功!")
result = messagebox.askyesno("确认", "确定要删除吗?")
# 返回 True/False
三、布局管理器(Geometry Managers)
.pack():按顺序堆叠(适合简单布局)
.grid(row=0, column=1):网格布局(最常用,灵活)
.place(x=50, y=100):绝对定位(较少用,不响应窗口缩放)
同一父容器中不要混用不同布局管理器。
四、小技巧
所有组件都支持 state="disabled" 禁用。
使用 lambda 传递参数给按钮命令:
tk.Button(root, text="点我", command=lambda: print("带参数"))
更新界面后调用 root.update()(一般不需要,除非在循环中)。
五、完整示例
import tkinter as tk
from tkinter import ttk, messagebox
root = tk.Tk()
root.title("tkinter 示例")
root.geometry("300x200")
tk.Label(root, text="姓名:").grid(row=0, column=0, sticky="w", padx=10, pady=5)
name_entry = tk.Entry(root)
name_entry.grid(row=0, column=1, padx=10)
agree_var = tk.BooleanVar()
tk.Checkbutton(root, text="我同意", variable=agree_var).grid(row=1, column=1, sticky="w")
def submit():
if agree_var.get():
messagebox.showinfo("成功", f"欢迎 {name_entry.get()}!")
else:
messagebox.showwarning("警告", "请先同意条款")
tk.Button(root, text="提交", command=submit).grid(row=2, column=1, pady=10)
root.mainloop()
如需更高级功能(如绘图、表格、树形控件),可结合 ttk、Canvas 或第三方库(如 customtkinter)。但对大多数简单桌面应用,上述组件已足够。
Tkinter常用GUI组件详解
858

被折叠的 条评论
为什么被折叠?



