Python核心编程(第3版)
第1 部分 通用应用主题

第5章 GUI编程

章节主张:GUI 章节的价值不在 Tkinter 本身,而在于帮你理解如何把脚本能力包装成一个可操作、可反馈的人机界面。

中文释读:很多个人工具和内部流程真正卡住的不是功能,而是入口。GUI 是一种分发方式:把程序状态、事件回调、控件布局和用户心智对齐。

章节知识路线

  1. 5.1 简介
  2. 5.2 Tkinter和Python编程
  3. 5.3 Tkinter示例
  4. 5.4 其他GUI简介
  5. 5.5 相关模块和其他GUI

关键论点

  • 控件是流程的可视化入口。
  • 事件驱动和界面线程会改变程序组织方式。
  • GUI 库比较提醒你抽象层与平台差异。

行动清单

  • 先画用户最短操作路径。
  • 让回调函数只做一件事。
  • 长任务不要直接堵在界面线程。

源章节深读

5.1 简介

解决的问题:这一节解决的是“5.1 简介在真实应用里到底扮演什么角色”。

第 5 章 GUI 编程 169 本章将对图形用户界面(Graphical User Interface,GUI)编程进行简要的介绍。

怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。

提醒:最常见的问题是只记住 5.1 简介 的 API 或步骤,却没搞清它的上下游依赖与边界条件。

原文线索

第 5 章 GUI 编程 169 本章将对图形用户界面(Graphical User Interface,GUI)编程进行简要的介绍。 无论你刚 接解本领域,还是希望学到更多相关知识, 亦或是想要看到 Python 中是如何实现的,本章都 会正合你意。 这短短的一章不可能展示所有 GUI 应用开发的东西,但是会为你奠定一个坚实 的基础。

5.2 Tkinter和Python编程

解决的问题:这一节解决的是“5.2 Tkinter和Python编程在真实应用里到底扮演什么角色”。

170 第 1 部分 通用应用主题 5.1.2 安装和使用 Tkinter Tkinter 在系统中不是默认必须安装的,可以通过在 Python 解释器中尝试导入 Tkinter 模 块(Python 1 和 2 版本,在 Python 3 中重命名为 tkinter)来检 查 Tkinter 是否可用。

怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。

提醒:最常见的问题是只记住 5.2 Tkinter和Python编程 的 API 或步骤,却没搞清它的上下游依赖与边界条件。

原文线索

170 第 1 部分 通用应用主题 5.1.2 安装和使用 Tkinter Tkinter 在系统中不是默认必须安装的,可以通过在 Python 解释器中尝试导入 Tkinter 模 块(Python 1 和 2 版本,在 Python 3 中重命名为 tkinter)来检 查 Tkinter 是否可用。 如果 Tkinter 可用,则不会有错误发生,如下所示。 >>> import Tkinter >>> 如果你的 Python 解释器在编译时没有启用 Tkinter,模块导入将会失败。

5.3 Tkinter示例

解决的问题:这一节解决的是“5.3 Tkinter示例在真实应用里到底扮演什么角色”。

174 第 1 部分 通用应用主题 我们将不会对 Tk 控件进行详细介绍,因为已经有很多不错的文档可以供你参阅了,比 如 Python 主站上的 Tkinter 主题页,或大量印刷资源和网上关于 Tcl/Tk 的资源(可以参见附 录 B)。

怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。

提醒:最常见的问题是只记住 5.3 Tkinter示例 的 API 或步骤,却没搞清它的上下游依赖与边界条件。

原文线索

174 第 1 部分 通用应用主题 我们将不会对 Tk 控件进行详细介绍,因为已经有很多不错的文档可以供你参阅了,比 如 Python 主站上的 Tkinter 主题页,或大量印刷资源和网上关于 Tcl/Tk 的资源(可以参见附 录 B)。 不过,后面会给出几个简单的例子来帮助你起步。 核心提示:默认参数是你的朋友 GUI 开发利用了Python 的默认参数,因为Tkinter 的控件中有很多默认行为。

5.4 其他GUI简介

解决的问题:这一节解决的是“5.4 其他GUI简介在真实应用里到底扮演什么角色”。

第 5 章 GUI 编程 185 第 71~108 行 到目前为止,doLS()是整个 GUI 应用的最关键部分。

怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。

提醒:最常见的问题是只记住 5.4 其他GUI简介 的 API 或步骤,却没搞清它的上下游依赖与边界条件。

原文线索

第 5 章 GUI 编程 185 第 71~108 行 到目前为止,doLS()是整个 GUI 应用的最关键部分。 它会进行所有安全检查(比如,目 标是否是一个目录? 如果发生错误,之前的目录就会重设为当前目录。

5.5 相关模块和其他GUI

解决的问题:这一节解决的是“5.5 相关模块和其他GUI在真实应用里到底扮演什么角色”。

194 第 1 部分 通用应用主题 图 5-10 Tile/Ttk 下的动物应用 UI 逐行解释 第 1~4 行 Tk 核心控件在 Tk 8.4 版本中增加了 3 个新控件。

怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。

提醒:最常见的问题是只记住 5.5 相关模块和其他GUI 的 API 或步骤,却没搞清它的上下游依赖与边界条件。

原文线索

194 第 1 部分 通用应用主题 图 5-10 Tile/Ttk 下的动物应用 UI 逐行解释 第 1~4 行 Tk 核心控件在 Tk 8.4 版本中增加了 3 个新控件。 其中一个是本应用中用到的 Spinbox (另 外两个是 LabelFrame 和 PanedWindow) 。 其余用到的控件都来自于 Tile/Ttk:Label、Button、 Combobox,以及 Style 类(有助于实现控件主题) 。

5.6 练习

解决的问题:这一节解决的是“5.6 练习在真实应用里到底扮演什么角色”。

196 第 1 部分 通用应用主题 (续表) GUI 库 描 述 PyKDE KDE 桌面环境对 Python 的绑定版本 http://riverbankcomputing.co.uk/pykde eric PyQt 开发的使用 QScintilla 编辑器控件的 Python IDE http://die-offenbachs.de/detlev/eric3 http://ericide.python-hosting.com/ PyQtGPL Qt(Win32Cygwin 端口) 、Sip、QScintilla、PyQt 包 http://pythonqt.vanrietpaap.nl 其他开源 GUI 工具包 FXPy FOX 工具包(http://fox-toolkit.org)对 Python 的绑定版本 http://fxpy.sf.net PyFLTK (fltk) FLTK 工具包(http://fltk.org)对 Python 的绑定版本 http://pyfltk.sf.net PyOpenGL (OpenGL) OpenGL(http://opengl.org)对 Python 的绑定版本 http://pyopengl.sf.net 商业软件 win32ui 微软 MFC(基于 Python 的 Windows 扩展) http://starship.python.net/crew/mhammond/win32 Swing Sun Microsystems Java/Swing(基于 Jython) http://jython.org ① Python 2 中为 Tkinter,Python 3 中为 tkinter。

怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。

提醒:最常见的问题是只记住 5.6 练习 的 API 或步骤,却没搞清它的上下游依赖与边界条件。

原文线索

196 第 1 部分 通用应用主题 (续表) GUI 库 描 述 PyKDE KDE 桌面环境对 Python 的绑定版本 http://riverbankcomputing.co.uk/pykde eric PyQt 开发的使用 QScintilla 编辑器控件的 Python IDE http://die-offenbachs.de/detlev/eric3 http://ericide.python-hosting.com/ PyQtGPL Qt(Win32Cygwin 端口) 、Sip、QScintilla、PyQt 包 http://pythonqt.vanrietpaap.nl 其他开源 GUI 工具包 FXPy FOX 工具包(http://fox-toolkit.org)对 Python 的绑定版本 http://fxpy.sf.net PyFLTK (fltk) FLTK 工具包(http://fltk.org)对 Python 的绑定版本 http://pyfltk.sf.net PyOpenGL (OpenGL) OpenGL(http://opengl.org)对 Python 的绑定版本 http://pyopengl.sf.net 商业软件 win32ui 微软 MFC(基于 Python 的 Windows 扩展) http://starship.python.net/crew/mhammond/win32 Swing Sun Microsystems Java/Swing(基于 Jython) http://jython.org ① Python 2 中为 Tkinter,Python 3 中为 tkinter。 可以在 Python wiki 站的 GUI 编程页面找到更多 Python 相关的 GUI 工具,该页面地址为: http://wiki.python.org/moin/GuiProgramming。 5.6 练习 5-1 客户端/服务器架构。

辨别题

为什么很多脚本作者做 GUI 时会突然觉得代码变乱?

本章图版学习路径

5.1 简介

GUI 控件和事件