什么是tkinter?
Tkinter 是Python的标准图形用户界面(GUI)库。
- 内置:如果你使用的是默认的Python发行版,则无需单独安装 – 它随Python一起提供。
- 包装器:它是一个薄的面向对象的包装器,围绕着Tcl/Tk,这是一个较旧但非常稳定的GUI工具包。
- 目的:让你能够构建具有窗口、按钮、标签、菜单、文本框等的桌面应用程序。
可以将其视为Python创建实际窗口的方式,而不仅仅是向终端打印信息。
开始第一个窗口
app.py
import tkinter as tk
# 创建主应用程序窗口
root = tk.Tk()
# 设置窗口标题
root.title("我的第一个 Tkinter 窗口")
# 设置窗口大小(宽 x 高)
root.geometry("400x300")
# 启动 Tkinter 事件循环
root.mainloop()
打开终端并运行:
python app.py你将看到第一个小白窗口。注意:我正在使用Python 3.12和Tcl-tk@8
如果您的PC尚未准备好,请安装Tcl-tk。
以下是在MacOS上安装它的方法(我使用的是Macbook M1)。
brew uninstall tcl-tk
brew install tcl-tk@8
安装Python 3.12
我使用pyenv来管理Python版本,您可以通过以下命令安装它:
brew install pyenv
现在,安装带有Tcl-tk的Python 3.12
env \
PATH="/opt/homebrew/opt/tcl-tk@8/bin:$PATH" \
LDFLAGS="-L/opt/homebrew/opt/tcl-tk@8/lib" \
CPPFLAGS="-I/opt/homebrew/opt/tcl-tk@8/include" \
PKG_CONFIG_PATH="/opt/homebrew/opt/tcl-tk@8/lib/pkgconfig" \
PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/opt/homebrew/opt/tcl-tk@8/include' --with-tcltk-libs='-L/opt/homebrew/opt/tcl-tk@8/lib -ltcl8.6 -ltk8.6'" \
pyenv install 3.12.8
添加第一个小部件
import tkinter as tk
# 创建主窗口
root = tk.Tk()
root.title("我的第一个 Tkinter 应用")
root.geometry("400x250")
# 添加一个标签
label = tk.Label(root, text="请输入您的名字:", font=("Arial", 12))
label.pack(pady=10)
# 添加一个文本输入框
entry = tk.Entry(root, font=("Arial", 12))
entry.pack(pady=5)
# 添加一个按钮
def say_hello():
name = entry.get()
if name.strip():
output_label.config(text=f"你好, {name}!")
else:
output_label.config(text="请输入您的名字。")
button = tk.Button(root, text="提交", font=("Arial", 12), command=say_hello)
button.pack(pady=10)
# 输出标签
output_label = tk.Label(root, text="", font=("Arial", 12), fg="blue")
output_label.pack(pady=10)
# 运行应用程序
root.mainloop()
这是我们的输出:
什么是 tkinter 小部件?
在 Tkinter 中,小部件只是一个 GUI 元素——您应用窗口的构建块。
可以将它们视为您在任何桌面应用程序中看到的控件:
- 标签(文本)
- 按钮
- 文本框
- 复选框
- 单选按钮
- 菜单
- 框架(用于分组的容器)
基本上:您在 Tkinter 窗口中放置的所有内容都是小部件。
好的,现在让我们构建一个非常简单的用户资料编辑窗口。
添加资料窗口
profile.py
import tkinter as tk
from tkinter import ttk
# 创建主窗口
root = tk.Tk()
root.title("资料窗口")
root.geometry("400x500")
root.configure(bg="#f5f5f5")
# ---- 头部 ----
header = tk.Label(root, text="用户资料", font=("Arial", 18, "bold"), bg="#f5f5f5")
header.pack(pady=15)
# ---- 个人头像(作为标签的占位符) ----
profile_pic = tk.Label(root, text="👤", font=("Arial", 50), bg="#f5f5f5")
profile_pic.pack(pady=10)
# ---- 名字 ----
name_label = tk.Label(root, text="姓名:", font=("Arial", 12), anchor="w", bg="#f5f5f5")
name_label.pack(fill="x", padx=20)
name_entry = tk.Entry(root, font=("Arial", 12))
name_entry.pack(fill="x", padx=20, pady=5)
# ---- 邮箱 ----
email_label = tk.Label(root, text="电子邮件:", font=("Arial", 12), anchor="w", bg="#f5f5f5")
email_label.pack(fill="x", padx=20)
email_entry = tk.Entry(root, font=("Arial", 12))
email_entry.pack(fill="x", padx=20, pady=5)
# ---- 个人简介 ----
bio_label = tk.Label(root, text="生物信息:", font=("Arial", 12), anchor="w", bg="#f5f5f5")
bio_label.pack(fill="x", padx=20)
bio_text = tk.Text(root, height=5, font=("Arial", 12))
bio_text.pack(fill="x", padx=20, pady=5)
# ---- 保存按钮 ----
def save_profile():
name = name_entry.get()
email = email_entry.get()
bio = bio_text.get("1.0", tk.END).strip()
print("个人资料已保存:")
print(f"姓名: {name}")
print(f"电子邮件: {email}")
print(f"个人简介: {bio}")
messagebox.showinfo("已保存", "个人信息已保存!")
save_button = ttk.Button(root, text="保存个人资料", command=save_profile)
save_button.pack(pady=20)
root.mainloop()
我们来到了这里
我们做了什么?我们制作了一个带有一些基本小部件的个人资料窗口:
- 一个标题(“用户个人资料”)。
- 一个占位符“个人资料图片”(现在只是一个Unicode 👤)。
- 姓名、电子邮件和个人简介的字段。
- 一个保存按钮,可以打印数据并显示消息框。
结论
对于已经拥有基于Python系统的开发者来说,只需要在其上添加一个简单的GUI层,Tkinter是理想的选择。
它内置于Python中,因此没有额外的依赖问题。
它与现有的Python代码无缝集成——您可以将脚本、函数或系统工具封装在一个带有按钮和输入的小窗口中。
开发过程快速而简单;几行Tkinter代码就可以将命令行脚本转变为可用的桌面工具。




