8.2.1 UI 编程概述
编写 GUI 程序与编写控制台程序既有相似点,又有一些差别。一方面,任何程序都要利 用编程语言的顺序、循环、分支、函数、模块等成分来搭建程序总体结构、控制程序流程;
另一方面,控制台程序要实现的功能一般都没有现成代码,需要程序员自己编制,而 GUI 程 序中的界面设计有 GUI 工具包支持,程序员的编程工作可以大大减少。这是因为图形界面在 技术上涉及很多底层细节,在功能上又具有与特定应用无关的通用性,所以很适合由专业的 软件厂商来实现,并以工具包的形式提供给程序员使用。
针对不同的操作系统平台、不同的编程语言,存在不同的 GUI 工具包。每种工具包都有 自己的编程界面和程序设计模式,程序员必须学习并遵循这些模式。有些工具包可以运行在 多种操作系统(如 Windows,Unix,MacOS)之上,并能在多种编程语言中使用,称为跨平 台的工具包。程序员一般都固定使用某种跨平台工具包,而不是换个平台就换个工具包,因 为学习使用一个新的工具包可能比学习一个新的编程语言还要难!
本书使用 Python 语言提供的标准 GUI 工具包:Tkinter 模块①。这个模块的名称来历是这 样的:原先有一种流行的跨平台 GUI 工具包 Tk,现在 Tkinter 模块通过定义一些类和函数, 实现了一个在 Python 中使用 Tk 的编程接口。可以简单地说,Tkinter 就是 Python 版的 Tk。
GUI 编程一般需要如下几个步骤:
设计界面外观:这包括创建窗口和其他各种构件,并进行合适的布局。这一步与其 说是程序设计,不如说是美工设计。在流行的 Visual Basic、Eclipse 等集成开发环境 中,这一步只需用鼠标点击、拖放、调整大小就能完成。
为每个构件定义事件处理程序:这一步是 GUI 开发的核心任务,决定着程序的功能 和与用户交互时的行为。
编写应用程序的启动和总控部分:进行必要的初始化工作之后,进入主循环。 不同应用程序的用户界面虽然肯定会有不同,但构件的选择和布局是有很多共性的。读者如果用过一些 Windows 应用程序(如 MS Office 中的各种程序)的话,一定会发现众多 Windows 程序在界面风格方面的雷同。以下我们虽然用 Tkinter 来实现 GUI,但各种构件的 用法和布局的讨论是有普遍意义的。
GUI 工具包一般都利用面向对象技术实现的,即构件都是对象,具有属性和方法。构件 对象的属性用来记录构件的各种数据特性,构件对象的方法实现构件的行为特性。