目录:
tkinter 是 Python 的标准 GUI(图形用户界面)工具包接口,可以用来构建简单桌面应用。
核心架构基于 Tcl/Tk,其中 Tcl 是一种动态解释型编程语言,Tk 则是用 C 语言实现的 Tcl 包,专门用于创建和操作 GUI 部件。
创建一个 tkinter 应用程序通常遵循以下固定流程:
import tkinter as tkroot = tk.Tk(),这是所有控件的容器root.mainloop(),使窗口保持显示并响应用户交互import tkinter as tk
root = tk.Tk() # 创建主窗口
root.geometry("300x150") # 设置窗口大小
label = tk.Label(root, text="Hello World!") # 创建标签控件
label.pack() # 使用 pack 布局管理器放置控件
root.mainloop() # 启动主事件循环
运行时可能会报如下错误,原因是 Homebrew 安装的 Python 默认是将核心库和 GUI 相关库分离开了。
File "/opt/homebrew/Cellar/python@3.13/3.13.3_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/tkinter/__init__.py", line 38, in <module>
import _tkinter # If this fails your Python may not be configured for Tk
^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named '_tkinter'
手动安装和 Python 版本相同的 python-tk 包即可。
$ brew install python-tk@3.13
tkinter 提供三种主要的布局管理器,各有适用场景:
对于按钮等控件使用 command 参数进行事件绑定:
def on_click():
print("按钮被点击")
button = tk.Button(root, text="点击", command=on_click)
也可以使用 bind() 监听键盘或鼠标的行为:
def on_key_press(event):
print(f"按下按键:{event.keysym}")
root.bind("<Key>", on_key_press) # 绑定所有按键事件
下面示例演示了标签(Label)、按钮(Button)和输入框(Entry)的常见用法:
import tkinter as tk
def on_button_click():
user_input = entry.get()
label.config(text=f"你输入了:{user_input}")
root = tk.Tk()
root.title("输入框示例")
root.geometry("300x150") # 设置窗口大小
entry = tk.Entry(root, width=20) # 创建输入框
entry.pack(pady=5)
btn = tk.Button(root, text="确认", command=on_button_click)
btn.pack()
label = tk.Label(root, text="等待输入...")
label.pack(pady=10)
root.mainloop()
grid() 布局管理器将界面划分为网格,通过 row 和 column 参数精确定位控件。
import tkinter as tk
def calculate():
try:
value = float(cms.get())
result.set(value)
except ValueError:
pass
root = tk.Tk()
root.title("身高计算器")
root.geometry("450x300")
tk.Label(root, text="请输入身高").grid(row=0, column=0)
cms = tk.StringVar() # 创建字符串变量
tk.Entry(root, width=7, textvariable=cms).grid(row=0, column=1)
tk.Label(root, text="cm").grid(row=0, column=2)
tk.Label(root, text="你的身高是").grid(row=1, column=0)
result = tk.StringVar()
tk.Label(root, textvariable=result).grid(row=1, column=1)
tk.Label(root, text="cm").grid(row=1, column=2)
B = tk.Button(root, text="计算", command=calculate)
B.grid(row=3, column=3)
root.mainloop()
import tkinter as tk
from tkinter import messagebox
def login():
username = entry_user.get()
password = entry_pass.get()
if username == "admin" and password == "123":
messagebox.showinfo("登录结果", "登录成功!")
else:
messagebox.showerror("登录结果", "用户名或密码错误")
root = tk.Tk()
root.title("登录窗口")
tk.Label(root, text="用户名:").grid(row=0, column=0)
entry_user = tk.Entry(root)
entry_user.grid(row=0, column=1)
tk.Label(root, text="密码:").grid(row=1, column=0)
entry_pass = tk.Entry(root, show="*") # 密码框显示星号
entry_pass.grid(row=1, column=1)
tk.Button(root, text="登录", command=login).grid(row=2, columnspan=2)
root.mainloop()
ttk 模块提供了更现代、美观的控件,使用方法与经典控件类似但外观更佳。
import tkinter as tk
from tkinter import ttk
style = ttk.Style()
style.theme_use('clam') # 使用 clam 主题
def callback():
print('点击了按钮')
root = tk.Tk()
root.geometry("300x150") # 设置窗口大小
ttk.Label(root, text="现代标签").pack()
ttk.Button(root, text="主题按钮", command=callback).pack()
root.mainloop() # 启动主事件循环
messagebox 模块提供了标准对话框,增强用户体验。
import tkinter as tk
from tkinter import messagebox
def warn():
messagebox.showwarning("警告", "这是一个警告")
def error():
messagebox.showerror("错误", "操作失败")
root = tk.Tk()
root.geometry("300x150") # 设置窗口大小
tk.Button(root, text="警告弹窗", command=warn).pack()
tk.Button(root, text="错误弹窗", command=error).pack()
root.mainloop() # 启动主事件循环
filedialog 模块可以打开文件对话框选择文件。
import tkinter as tk
from tkinter import filedialog, messagebox
def select_file():
# 文件选择
file_path = filedialog.askopenfilename(title="选择文件")
if file_path:
messagebox.showinfo("文件选择", f"已选择:{file_path}")
root = tk.Tk()
root.geometry("300x150") # 设置窗口大小
tk.Button(root, text="选择文件", command=select_file).pack()
root.mainloop() # 启动主事件循环
↶ 返回首页 ↶