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

推荐订阅源

S
Schneier on Security
GbyAI
GbyAI
H
Help Net Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
The Blog of Author Tim Ferriss
Vercel News
Vercel News
Microsoft Azure Blog
Microsoft Azure Blog
Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
AWS News Blog
AWS News Blog
Spread Privacy
Spread Privacy
Apple Machine Learning Research
Apple Machine Learning Research
L
LINUX DO - 最新话题
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Privacy International News Feed
C
CERT Recently Published Vulnerability Notes
C
Cybersecurity and Infrastructure Security Agency CISA
I
Intezer
Hugging Face - Blog
Hugging Face - Blog
H
Heimdal Security Blog
N
News and Events Feed by Topic
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Troy Hunt's Blog
大猫的无限游戏
大猫的无限游戏
SecWiki News
SecWiki News
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Application and Cybersecurity Blog
Application and Cybersecurity Blog
F
Fortinet All Blogs
Hacker News: Ask HN
Hacker News: Ask HN
Know Your Adversary
Know Your Adversary
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 聂微东
S
Secure Thoughts
云风的 BLOG
云风的 BLOG
O
OpenAI News
The Cloudflare Blog
Jina AI
Jina AI
U
Unit 42
L
Lohrmann on Cybersecurity
Attack and Defense Labs
Attack and Defense Labs
The Register - Security
The Register - Security
G
Google Developers Blog
量子位
Simon Willison's Weblog
Simon Willison's Weblog
V
Visual Studio Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
G
GRAHAM CLULEY
TaoSecurity Blog
TaoSecurity Blog

博客园 - 箫笛

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 等现代文档。