python-GUI编程介绍

让 GUI 程序启动和运行起来需要以下 5 个主要步骤。
1. 导入 Tkinter 模块(或 from Tkinter import *)。
2. 创建一个顶层窗口对象,用于容纳整个 GUI 应用。
3. 在顶层窗口对象之上(或者“其中”)构建所有的 GUI 组件(及其功能)。
4. 通过底层的应用代码将这些 GUI 组件连接起来。
5. 进入主事件循环。

一、顶层窗口和控件

在 GUI 编程中,顶层的根窗口对象包含组成 GUI 应用的所有小窗口对象。它们可能是文字标签、按钮、列表框等。这些独立的 GUI 组件称为控件。所以当我们说创建一个顶层窗口时,只是表示需要一个地方来摆放所有的控件。
top = Tkinter.Tk() # or just Tk() with "from Tkinter import *"

Tkinter.Tk()返回的对象通常称为根窗口,这也是一些应用使用 root 而不是 top 来指代它的原因。顶层窗口是那些在应用中独立显示的部分。 GUI 程序中可以有多个顶层窗口,但是其中只能有一个是根窗口。可以选择先把控件全部设计好,再添加功能;也可以边设计控件边添加功能。控件可以独立存在,也可以作为容器存在。如果一个控件包含其他控件,就可以将其认为是那些控件的父控件。相应地,如果一个控件被其他控件包含,则将其认为是那个控件的子控件,而父控件就是下一个直接包围它的容器控件。

控件有一些相关的行为,比如按下按钮、将文本写入文本框等。这些用户行为称为事件,而 GUI 对这类事件的响应称为回调。

二、事件驱动处理

事件可以包括按钮按下(及释放)、鼠标移动、敲击回车键等。一个 GUI 应用从开始到结束就是通过整套事件体系来驱动的。这种方式称为事件驱动处理。

最简单的鼠标移动就是一个带有回调的事件的例子。假设鼠标指针正停在 GUI 应用顶层窗口的某处。如果你将鼠标移动到应用的另一部分,鼠标移动的行为会被复制到屏幕的光标上,于是看起来像是根据你的手移动的。系统必须处理的这些鼠标移动事件可以绘制窗口上的指针移动。当释放鼠标时,不再有事件需要处理,此时屏幕会重新恢复闲置的状态。

三、布局管理器(geometry manager)

Tk 有 3 种布局管理器来帮助控件集进行定位。最原始的一种称为 Placer。它的做法非常直接:你提供控件的大小和摆放位置,然后管理器就会将其摆放好。

第二种布局管理器会是你主要使用的,它叫做 Packer,这个命名十分恰当,因为它会把控件填充到正确的位置(即指定的父控件中),然后对于之后的每个控件,会去寻找剩余的空间进行填充。

第三种布局管理器是 Grid。你可以基于网格坐标,使用 Grid 来指定 GUI 控件的放置。Grid 会在它们的网格位置上渲染 GUI 应用中的每个对象。

当所有控件摆放好后,可以让应用进入前述的无限主循环中。在 Tkinter 中,代码如下所示。

Tkinter.mainloop()

一般这是程序运行的最后一段代码。当进入主循环后, GUI 就从这里开始接管程序的执行。所有其他行为都会通过回调来处理,甚至包括退出应用。当选择 File 菜单并单击 Exit 菜单选项,或者直接关闭窗口时,就会调用一个回调函数来结束这个 GUI 应用。

四、tkinter控件

python-GUI编程介绍