惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
S
Schneier on Security
博客园 - 聂微东
爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
有赞技术团队
有赞技术团队
腾讯CDC
博客园 - 叶小钗
WordPress大学
WordPress大学
博客园_首页
J
Java Code Geeks
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
Microsoft Azure Blog
Microsoft Azure Blog
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
Schneier on Security
Schneier on Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
The Register - Security
The Register - Security
C
Cybersecurity and Infrastructure Security Agency CISA
P
Privacy & Cybersecurity Law Blog
P
Proofpoint News Feed
P
Privacy International News Feed
K
Kaspersky official blog
C
CERT Recently Published Vulnerability Notes
阮一峰的网络日志
阮一峰的网络日志
F
Full Disclosure
NISL@THU
NISL@THU
AWS News Blog
AWS News Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
MongoDB | Blog
MongoDB | Blog
A
Arctic Wolf
云风的 BLOG
云风的 BLOG
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threatpost
D
Docker
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
V2EX - 技术
V2EX - 技术
G
GRAHAM CLULEY
M
MIT News - Artificial intelligence
H
Heimdal Security Blog
N
News and Events Feed by Topic
P
Proofpoint News Feed

博客园 - 箫笛

Tkinter - Entry 输入框组件 Tkinter - Button 组件 Tkinter - Label 组件 Tkinter - tk 变量 Tkinter - 事件与绑定 Tkinter - 几何管理器 Tkinter - 核心概念 Tkinter - 快速开始 Tkinter - 介绍 Python 编程 - 条件表达式 Python 编程 - 星号下划线参数释义 shell 编程 - shell 脚本的交互方式 Python insall - macOS 系统安装python的几种方式 Miniconda - Python 环境管理工具 Python 编程 - 下划线命名的区别 Python 编程 - 元类编程 Python 编程 - 多重继承与MRO Python 编程 - 描述符协议 Python 编程 - 类型注解 Python 编程 - 生成器表达式 Python 编程 - 集合 Python 编程 - 装饰器 Python 编程 - 闭包 Python 编程 - 列表推导式 Python 编程 - 函数式编程 Python 编程 - lambda 函数 Python 编程 - 文件操作 Python 编程 - 输入与输出 Python 编程 - 面向对象编程 Python 编程 - 元组(tuple) Python 编程 - 字符串(str) Python 编程 - 字典(dict) Python 编程 - 列表(list) Python 编程 - 数据类型和数据结构 Python 编程 - 语句 Python 编程 - 函数 windows - WSL 的安装与使用 shell编程 - dialog 程序使用指南 FE Team - 如何做好前端代码审查 git 提交的撤销和恢复 React15 - redux-saga 如何在saga中实现轮询接口调用? React15 - React CSS Modules BEM命名实践 React15 - React 15 中 componentWillReceiveProps 为什么会多次调用, 同时componentDidUpdate 也会多次调用? React15 - React15类组件多次执行render方法的原因? React15 - React15应用中代码逻辑复用方案 React15 - React状态同步问题解决 React15 - React 15 中 React.pureComponent 的使用场景 React15 - React 15应用在页面渲染时会多次执行类组件的render 函数的原因 React15 - React 15 中能用 componetDidUpdate 代替 componentWillReceiveProps 吗? React15 - React 15 生命周期函数详解 React15 - 如何在React 15中实现自定义的事件订阅与发送(例如组件间通信) React15 - React15应用中的事件订阅和发送机制 React15 - CSS中的BEM规范 React15 - React CSS Modules BEM命名实践 React15 - 写sass 样式文件,嵌套的结构好,还是扁平的结构好? React15 - sass 中 @mixin 和 @extend 的区别是什么? React15 - React 15 应用 如何使用Css moudules 方式进行模块化开发 React15 - React15应用Sass使用指南 React15 - React 15 应用如何进行性能优化?
Tkinter - Python GUI 开发
箫笛 · 2026-07-04 · via 博客园 - 箫笛

一、Tkinter 简介

Tkinter 是 Python 标准库自带的 GUI(图形用户界面)开发工具包,基于 Tcl/Tk 构建。安装 Python 后即可直接使用,无需额外安装。Python 3 中包名为 tkinter(全小写)。

适用场景:小型工具、内部应用、原型验证、脚本可视化等。跨平台支持 Windows/macOS/Linux。


二、环境准备

检查 Tkinter 是否可用,在终端执行:

python3 -m tkinter

如果弹出测试窗口,说明已就绪。

Linux(Ubuntu/Debian)若未安装:

sudo apt install python3-tk

三、第一个窗口

import tkinter as tk

# 创建主窗口
root = tk.Tk()
root.title("我的第一个窗口")          # 窗口标题
root.geometry("300x200")             # 宽x高

# 创建标签
label = tk.Label(root, text="你好,Tkinter!", font=("微软雅黑", 16))
label.pack(pady=20)

# 创建按钮
button = tk.Button(root, text="退出", command=root.destroy)
button.pack()

# 启动事件循环(必须调用)
root.mainloop()

核心三步:创建根窗口 → 添加组件 → 调用 mainloop() 启动事件循环。


四、常用组件

组件 用途 关键参数
Label 显示文本或图片 text, font, fg, bg
Button 可点击按钮 text, command
Entry 单行文本输入 textvariable, show
Text 多行文本编辑 -
Frame 容器,用于组织其他组件 relief, bd
Listbox 列表选择 listvariable, selectmode
Canvas 绘图区域 -

ttk 模块提供更美观的组件(如 ComboboxTreeview):

from tkinter import ttk
combo = ttk.Combobox(root, values=["选项1", "选项2"])

五、布局管理

Tkinter 提供三种布局管理器:

1. pack() — 顺序排列

按添加顺序自上而下排列。

btn1.pack(side='left', padx=5)   # 水平排列
btn2.pack(fill='x', pady=5)      # 水平填充

常用参数:side(方向)、fill(填充)、padx/pady(外边距)。

2. grid() — 网格布局(推荐)

以行列表格形式精准定位,表单类界面首选

label = tk.Label(root, text="用户名:")
label.grid(row=0, column=0, sticky='e')  # sticky='e' 右对齐

entry = tk.Entry(root)
entry.grid(row=0, column=1, sticky='ew') # 水平拉伸

3. place() — 绝对定位

指定精确坐标。

widget.place(x=100, y=200, anchor='nw')

最佳实践:优先用 grid 实现复杂布局,用 Frame 容器组织组件。


六、事件处理

方式一:Button 的 command 参数(最简单)

def on_click():
    print("按钮被点击了")

btn = tk.Button(root, text="点击", command=on_click)

方式二:bind() 方法(更灵活)

def callback(event):
    print(f"点击坐标: {event.x}, {event.y}")

widget.bind("<Button-1>", callback)   # 鼠标左键点击

常用事件类型

事件 说明
<Button-1> 鼠标左键单击
<Button-3> 鼠标右键单击
<Double-Button-1> 鼠标左键双击
<KeyPress-A> 按下 A 键
<Return> 回车键
<Enter> / <Leave> 鼠标进入/离开控件
<Configure> 窗口尺寸变化

七、完整示例:登录窗口

import tkinter as tk
from tkinter import messagebox

def login():
    if entry_user.get() == "admin" and entry_pass.get() == "123456":
        messagebox.showinfo("成功", "登录成功!")
    else:
        messagebox.showerror("错误", "账号或密码错误")

root = tk.Tk()
root.title("登录")
root.geometry("250x150")

# 用户名
tk.Label(root, text="用户名:").grid(row=0, column=0, sticky='e', padx=5, pady=5)
entry_user = tk.Entry(root)
entry_user.grid(row=0, column=1, padx=5, pady=5)

# 密码
tk.Label(root, text="密码:").grid(row=1, column=0, sticky='e', padx=5, pady=5)
entry_pass = tk.Entry(root, show="*")   # show="*" 隐藏密码
entry_pass.grid(row=1, column=1, padx=5, pady=5)

# 登录按钮
btn = tk.Button(root, text="登录", command=login)
btn.grid(row=2, column=0, columnspan=2, pady=10)  # columnspan 跨两列

root.mainloop()

八、学习资源

提示:Tcl/Tk 8.5(2007年)引入了现代主题组件,网上的旧教程可能已过时,建议优先参考 TkDocs 等现代文档。