Tkinter 简介

Tkinter 是 Python 的标准 GUI(图形用户界面)库,它内置在 Python 的安装包中,无需额外安装,是学习 GUI 编程的绝佳起点。

python tkinter简明教程
(图片来源网络,侵删)

核心思想: Tkinter 通过创建和配置各种“组件”(Widget,如按钮、标签、输入框等)来构建界面,并将这些组件组织在一个“主窗口”(Root Window)中。


第一步:创建一个主窗口

所有 Tkinter 应用都必须从一个主窗口开始,这个窗口是所有其他组件的容器。

import tkinter as tk
# 1. 创建一个主窗口
# root 是一个约定俗成的变量名,代表整个应用的根窗口
root = tk.Tk()
# 2. 设置窗口标题"我的第一个 Tkinter 窗口")
# 3. 设置窗口大小
# 格式为 "宽度x高度"
root.geometry("400x300")
# 4. 运行主事件循环
# 这行代码会启动窗口,并让它持续显示,等待用户事件(如点击、输入)
root.mainloop()

如何运行:

  1. 将以上代码保存为 app.py 文件。
  2. 在终端或命令行中运行 python app.py

你会看到:为“我的第一个 Tkinter 窗口”,大小为 400x300 像素的空白窗口。

python tkinter简明教程
(图片来源网络,侵删)

第二步:添加基本组件(Widget)

让我们在窗口里放一些东西,最常见的组件有:

  • Label (标签): 用于显示文本或图像。
  • Button (按钮): 用于触发一个动作。
  • Entry (输入框): 用于让用户输入单行文本。
import tkinter as tk
root = tk.Tk()"组件示例")
root.geometry("400x300")
# --- 创建组件 ---
# 1. 创建一个标签
# text: 显示的文本
# fg: 前景色 (foreground)
# bg: 背景色 (background)
# font: 字体
label = tk.Label(root, text="你好,Tkinter!", fg="blue", bg="lightgray", font=("Arial", 20))
# 2. 创建一个按钮
# command: 当按钮被点击时,要调用的函数
def on_button_click():
    print("按钮被点击了!")
    # 也可以改变标签的文本
    label.config(text="你点击了按钮!")
button = tk.Button(root, text="点击我", command=on_button_click, bg="green", fg="white")
# 3. 创建一个输入框
entry = tk.Entry(root, width=30, font=("Arial", 12))
entry.insert(0, "请在这里输入...") # 预设文本
# --- 将组件放置到窗口中 ---
# .pack() 是最简单的布局管理器,它会按顺序垂直排列组件
label.pack(pady=20) # pady=20 表示在上下各留出20像素的间距
entry.pack(pady=10)
button.pack(pady=10)
root.mainloop()

新知识点:

  • tk.Label(...), tk.Button(...), tk.Entry(...): 创建不同类型的组件。
  • command 参数: 这是按钮的灵魂,它指定一个函数,当按钮被点击时,该函数就会被执行。
  • .pack(): 这是 Tkinter 的三种布局管理器之一,它会将组件按添加顺序从上到下(或从左到右)堆叠起来。padypack 的一个选项,用于控制垂直方向的间距。

第三步:布局管理

当窗口变大变复杂时,.pack() 就不够用了,Tkinter 提供了更强大的布局管理器。

grid() - 网格布局

grid() 将窗口划分为一个网格,你可以指定组件在第几行、第几列。

python tkinter简明教程
(图片来源网络,侵删)
import tkinter as tk
root = tk.Tk()"网格布局示例")
# 创建几个标签
label1 = tk.Label(root, text="用户名:")
label2 = tk.Label(root, text="密码:")
# 创建两个输入框
entry1 = tk.Entry(root)
entry2 = tk.Entry(root, show="*") # show="*" 让输入的内容显示为星号,常用于密码
# 使用 grid 布局
# sticky="e" 表示组件在网格单元内靠东(右)对齐
label1.grid(row=0, column=0, sticky="e")
entry1.grid(row=0, column=1, pady=5)
label2.grid(row=1, column=0, sticky="e")
entry2.grid(row=1, column=1, pady=5)
root.mainloop()

新知识点:

  • grid(row=..., column=...): 指定组件所在的行和列(从0开始计数)。
  • sticky="e": 控制组件在网格单元内的对齐方式。e=东(右), w=西(左), n=北(上), s=南(下)。

place() - 绝对定位

place() 允许你精确指定组件的像素坐标。

import tkinter as tk
root = tk.Tk()"绝对定位示例")
# 在坐标 (x=50, y=50) 的位置创建一个宽100、高50的按钮
button = tk.Button(root, text="精确放置的按钮")
button.place(x=50, y=50)
root.mainloop()

新知识点:

  • place(x=..., y=..., width=..., height=...): 直接指定组件的左上角坐标和大小。
  • 注意: place() 在窗口大小改变时不会自动调整,所以通常不推荐用于复杂的界面。

第四步:获取用户输入

GUI 的核心是交互,下面是一个完整的登录界面示例,展示如何获取输入框的值。

import tkinter as tk
from tkinter import messagebox # 导入消息框
def login():
    """登录按钮的回调函数"""
    username = entry_username.get()
    password = entry_password.get()
    if username == "admin" and password == "123456":
        messagebox.showinfo("成功", "登录成功!欢迎回来!")
    else:
        messagebox.showerror("错误", "用户名或密码错误!")
# --- 创建主窗口 ---
root = tk.Tk()"登录界面")
root.geometry("300x200")
# --- 组件 ---
tk.Label(root, text="用户名:").grid(row=0, column=0, padx=10, pady=10, sticky="e")
entry_username = tk.Entry(root)
entry_username.grid(row=0, column=1, padx=10, pady=10)
tk.Label(root, text="密码:").grid(row=1, column=0, padx=10, pady=10, sticky="e")
entry_password = tk.Entry(root, show="*")
entry_password.grid(row=1, column=1, padx=10, pady=10)
login_button = tk.Button(root, text="登录", command=login)
login_button.grid(row=2, column=0, columnspan=2, pady=20) # columnspan=2 让按钮跨越两列
# --- 运行 ---
root.mainloop()

新知识点:

  • .get(): 这是获取 Entry(输入框)内容的关键方法。
  • messagebox.showinfo(...)messagebox.showerror(...): 创建弹出式消息框,用于向用户显示信息或错误。
  • padxpady: 在 grid 中,它们控制组件与网格单元边缘的水平和垂直间距。
  • columnspan: 让一个组件跨越多列。

总结与进阶

核心要点回顾

  1. 导入库: import tkinter as tk
  2. 创建主窗口: root = tk.Tk()
  3. 创建组件: 组件 = tk.组件类型(容器, 参数...)
  4. 布局组件: 使用 .pack(), .grid(), 或 .place()
  5. 运行主循环: root.mainloop()
  6. 事件处理: 使用 command 参数或 组件.bind("<事件>", 函数)

常用组件一览

组件 描述
tk.Label 显示文本或图像
tk.Button 可点击的按钮
tk.Entry 单行文本输入框
tk.Text 多行文本输入框
tk.Checkbutton 复选框
tk.Radiobutton 单选按钮
tk.Scale 滑动条
tk.Listbox 列表框
tk.Canvas 画布,用于绘制图形
tk.Frame 框架,用于分组和布局其他组件

进阶学习路径

  1. 配置选项: 几乎所有组件都有丰富的配置选项(如 bg, fg, font, width, height, text, image 等),通过查阅官方文档可以深入了解。
  2. ttk 模块: tkinter.ttk 提供了外观更现代化的组件,建议在新项目中优先使用 ttk 的组件(如 ttk.Button, ttk.Label),它们能更好地适应不同操作系统的主题。
  3. 事件绑定: 除了 command,你还可以使用 .bind() 方法来响应更具体的事件,如 <KeyPress> (键盘按下), <Button-1> (鼠标左键点击) 等。
  4. 构建复杂应用: 当应用变大时,学习使用面向对象编程(OOP)的方式,将每个窗口或功能模块封装成一个类,会使代码结构更清晰、更易于维护。

希望这份简明教程能帮助你顺利开启 Tkinter 的学习之旅!动手实践是掌握 GUI 编程最快的方式。