Python GUI 编程
GUI,Graphical User Interface(图形用户界面)编程主要使用的 GUI 工具包是 Python 默认的 GUI 库 Tk,通过 Python 的接口 Tkinter(“Tk interface”的缩写)可以访问 Tk
tkinter
tkinter 是 Python 的默认 GUI 库,它基于 Tk 工具包,该工具包最初是为工具命令语言(Tool Command Language,Tcl)设计的;Tk 普及后,被移植到很多其他的脚本语言中,包括 Perl(Perl/Tk)、Ruby(Ruby/Tk)和 Python(Tkinter)
让 GUI 程序启动和运行起来需要以下五个主要步骤:
- 导入 tkinter 模块或 from Tkinter import *
- 创建一个顶层窗口对象,用于容纳整个 GUI 应用
- 在顶层窗口对象之上或者“其中”构建所有的 GUI 组件及其功能)
- 通过底层的应用代码将这些GUI组件连接起来
- 进入主事件循环
窗口和控件
在 GUI 编程中,顶层的根窗口对象包含组成 GUI 应用的所有小窗口对象;它们可能是文字标签、按钮、列表框等,这些独立的 GUI 组件称为控件
所以当说创建一个顶层窗口时,只是表示需要一个地方来摆放所有的控件;控件可以独立存在,也可以作为容器存在;如果一个控件包含其他控件,就可以将其认为是那些控件的父控件
相应地,如果一个控件被其他控件包含,则将其认为是那个控件的子控件,而父控件就是下一个直接包围它的容器控件。
事件驱动处理
控件有一些相关的行为,比如按下按钮、将文本写入文本框等;这些用户行为称为事件,而 GUI 对这类事件的响应称为回调
事件可以包括按钮按下(及释放)、鼠标移动、敲击回车键等,一个 GUI 应用从开始到结束就是通过整套事件体系来驱动的,这种方式称为事件驱动处理
布局管理器
Tk 有 3 种布局管理器来帮助控件集进行定位
- Placer
它的做法非常直接:提供控件的大小和摆放位置,然后管理器就会将其摆放好;问题是必须对所有控件进行这些操作,这样就会加重编程开发者的负担,因为这些操作本应该是自动完成的
- Packer
它会把控件填充到正确的位置(即指定的父控件中),然后对于之后的每个控件,会去寻找剩余的空间进行填充;这个处理很像是旅行时往行李箱中填充行李的过程
- Grid
基于网格坐标,使用 Grid 来指定 GUI 控件的放置;Grid 会在它们的网格位置上渲染 GUI 应用中的每个对象
GUI 示例
顶层窗口
1 | import tkinter |
Tk 控件
控件 | 名称 | 描述 |
---|---|---|
Button | 按钮 | 类似标签,但提供额外的功能,例如鼠标掠过、按下、释放以及键盘操作/事件 |
Canvas | 画布 | 提供绘图功能(直线、椭圆、多边形、矩形),可以包含图形或位图 |
Checkbutton | 选择按钮 | 一组方框,可以选择其中的任意个(类似 HTML 中的 checkbox) |
Entry | 文本框 | 单行文字域,用来收集键盘输入(类似 HTML 中的 text) |
Frame | 框架 | 包含其他组件的纯容器 |
Label | 标签 | 用来显示文字或图片 |
LabelFrame | 标签框架 | 标签和框架的组合,拥有额外的标签属性 |
Listbox | 列表框 | 一个选项列表,用户可以从中选择 |
Menu | 菜单 | 点下菜单按钮后弹出的一个选项列表,用户可以从中选择 |
Menubutton | 菜单按钮 | 用来实现下拉式菜单 |
Message | 消息框 | 类似于标签,但可以显示多行文本 |
PanedWindow | 容器窗口 | 控制其他组件在其中摆放的容器控件 |
Radiobutton | 单选按钮 | 一组按钮,其中只有一个可被“按下” (类似 HTML 中的 radio) |
Scale | 进度条 | 线性“滑块”组件,可设定起始值和结束值,会显示当前位置的精确值 |
Scrollbar | 滚动条 | 对其支持的组件(文本域、画布、列表框、文本框)提供滚动功能 |
Spinbox | 旋转框 | 文本框和按钮的结合,允许对值进行调整 |
Text | 文本域 | 多行文字区域,可用来收集(或显示)用户输入的文字(类似 HTML 中的 textarea) |
Toplevel | 顶级 | 类似框架,但提供一个独立的窗口容器 |