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

推荐订阅源

量子位
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Schneier on Security
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
C
Cybersecurity and Infrastructure Security Agency CISA
Engineering at Meta
Engineering at Meta
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
T
Threat Research - Cisco Blogs
C
Cisco Blogs
Recent Announcements
Recent Announcements
S
Securelist
N
Netflix TechBlog - Medium
The Register - Security
The Register - Security
P
Privacy & Cybersecurity Law Blog
宝玉的分享
宝玉的分享
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LINUX DO - 热门话题
T
Tor Project blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
月光博客
月光博客
AWS News Blog
AWS News Blog
P
Proofpoint News Feed
博客园 - 司徒正美
L
LINUX DO - 最新话题
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
H
Help Net Security
Spread Privacy
Spread Privacy
PCI Perspectives
PCI Perspectives
Project Zero
Project Zero
I
Intezer
T
The Blog of Author Tim Ferriss
有赞技术团队
有赞技术团队
The Last Watchdog
The Last Watchdog
C
Check Point Blog
Blog — PlanetScale
Blog — PlanetScale
B
Blog RSS Feed
MyScale Blog
MyScale Blog
V
Vulnerabilities – Threatpost
Recorded Future
Recorded Future
T
Tenable Blog
Jina AI
Jina AI
D
DataBreaches.Net
阮一峰的网络日志
阮一峰的网络日志

博客园 - 箫笛

Tkinter - Entry 输入框组件 Tkinter - Button 组件 Tkinter - Label 组件 Tkinter - tk 变量 Tkinter - 事件与绑定 Tkinter - 几何管理器 Tkinter - 快速开始 Tkinter - 介绍 Python 编程 - 条件表达式 Python 编程 - 星号下划线参数释义 shell 编程 - shell 脚本的交互方式 Python insall - macOS 系统安装python的几种方式 Miniconda - Python 环境管理工具 Tkinter - Python GUI 开发 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 - 核心概念
箫笛 · 2026-07-09 · via 博客园 - 箫笛

架构

Python、Tkinter、Tcl 和 Tk 如何协同工作

技术栈

Tkinter 是一个绑定层——它为 Tk GUI 工具包提供了 Python API,而 Tk 本身是用 C 编写的,并通过 Tcl 脚本语言进行控制。

抽象层次

  ┌─────────────────────────────────┐
  │     你的 Python 应用程序        │  ← 你编写的代码
  ├─────────────────────────────────┤
  │   tkinter(Python 模块)        │  ← Python ↔ Tcl 桥接层
  ├─────────────────────────────────┤
  │   Tcl/Tk(C 语言库)            │  ← 实际的 GUI 引擎
  ├─────────────────────────────────┤
  │   操作系统窗口系统               │  ← Win32 / Cocoa / X11
  └─────────────────────────────────┘

Tk 实例

每个 Tkinter 应用程序有且仅有一个 tk.Tk() 实例。它代表与 Tk 解释器的连接,并创建主(根)窗口。

⚠️ 只能有一个 Tk()

永远不要创建多个 tk.Tk() 实例。如需额外窗口,请使用 tk.Toplevel()。多个 Tk() 实例会导致不可预测的行为。


控件层次结构

控件形成一棵父-子树。每个控件(除根窗口外)都有一个父控件,作为第一个位置参数传入。

hierarchy.py

root  = tk.Tk()                        # "."
frame = ttk.Frame(root)              # ".!frame"
label = ttk.Label(frame, text="Hi") # ".!frame.!label"

print(label.winfo_parent())          # ".!frame"
print(frame.winfo_children())        # [<Label .!frame.!label>]

事件循环

Tkinter 是事件驱动的。调用 mainloop() 后,Tkinter 持续执行以下循环:等待事件 → 分发给处理程序 → 重绘变更的控件 → 重复。如果回调函数中有长时间运行的代码,会阻塞并冻结 UI——参见多线程相关内容。


tk 与 ttk 的区别

tkintertk tkinter.ttkttk
自 20 世纪 90 年代以来的原始控件 在 Tk 8.5 中引入
直接配置每个视觉属性 尽可能使用操作系统原生外观
一致的跨平台外观(非原生) 额外控件:Treeview、Notebook、Progressbar……
import tkinter as tk from tkinter import ttk

💡 最佳实践

只要存在 ttk 版本,优先使用 ttk 控件。对于 CanvasTextListbox 以及其他没有 ttk 等效控件的组件,回退使用 tk 原生控件。