Python 的图形用户界面库
1) PyGObject
PyGObject 库为基于 GObject 的 C 函数库提供了内省绑定,这些库可以支持 GTK+3 图形界面工具集,因此时 GObject 提供了丰富的图形界面组件。
2) PyGTK
PyGTK 基于老版本的 GTK+2 的库提供绑定,借助于底层 GTK+2 所提供的各种可视化元素和组件,同样可以开发出在 GNOME 桌面系统上运行的软件,因此它主要适用于 Linux/UNIX 系统。PyGTK 对 GTK+2 的 C 语言进行了简单封装,提供了面向对象的编程接口。其官方网址是http://www.pygtk.org/。
3) PyQt
PyQt 是 Python 编程语言和 Qt 库的成功融合。Qt 本身是一个扩展的 C++ GUI 应用开发框架,Qt 可以在 UNIX、Windows 和 Mac OS X 上完美运行,因此 PyQt 是建立在 Qt 基础上的 Python 包装。所以 PyQt 也能跨平台使用。
4) PySide
PySide 是由 Nokia 提供的对 Qt 工具集的新的包装库,目前成熟度不如 PyQt。
5) wxPython
wxPython 是一个跨平台的 GUI 工具集,wxPython 以流行的 wxWidgets(原名 wxWindows)为基础,提供了良好的跨平台外观。简单来说,wxPython 在 Windows上调用 Windows 的本地组件、在 Mac OS 上调用 Mac OS X 的本地组件、在 Linux 上调用 Linux 的本地组件,这样可以让 GUI 程序在不同的平台上显示平台对应的风格。wxPython 是一个非常流行的跨平台的 GUI 库。其官方网址是http://www.wxpython.org/。
如果有需要,则完全可以选择上面这些 Python GUI 库来开发图形用户界面。如果考虑开发跨平台的图形用户界面,则推荐使用 PyQt 或 wsPython。
6)tkinter
python编程语言内置库。Tkinter是Python默认的GUI库。它基于Tk工具包,该工具包最初是为工具命令语言(Tool Command Language, Tcl)设计的。TK普及后,被移植到很多其他的脚本语言中。在Python2中叫Tkinter,在Python3中叫tkinter;以下是一个实例
//显示一个图形界面
import tkinter as tk
win = tk.Tk() # 创建主窗口
win.title('My Tkinter Window') # 设置窗口标题
win.geometry('400x400') # 设置界面大小
win.mainloop() # 消息循环
tkinter的GUI组件之间的关系
使用 Tkinter 进行 GUI 编程与其他语言的 GUI 编程基本相似,都是使用不同的“积木块”来堆出各种各样的界面。因此,学习 GUI 编程的总体步骤大致可分为三步:
- 了解GUI 库大致包含哪些组件,就相当于熟悉每个积木块到底是些什么东西。
- 掌握容器及容器对组件进行布局的方法,就相当于掌握拼图的“母板”,以及母板怎么固定积木块的方法。
- 逐个掌握各组件的用法,则相当于深入掌握每个积木块的功能和用法。
Tkinter 的 GUI 组件有两个根父类,它们都直接继承了 object 类:
- Misc:它是所有组件的根父类。
- Wm:它主要提供了一些与窗口管理器通信的功能函数。
应用程序主窗口基类:
- 对于 Misc 和 Wm 两个基类而言,GUI 编程并不需要直接使用它们,但由于它们是所有 GUI 组件的父类,因此 GUI 组件都可以直接使用它们的方法。
- Misc 和 Wm 派生了一个子类 Tk,它代表应用程序的主窗口。因此所有 Tkinter GUI 编程通常都需要直接或间接使用该窗口类。
应用程序组件基类:
- BaseWidget 是所有组件的基类,它还派生了一个子类 Widget。Widget 代表一个通用的 GUI 组件,Tkinter 所有的 GUI 组件都是 Widget 的子类。
- 再来看 Widget 的父类。Widget 一共有四个父类,除 BaseWidget 之外,还有 Pack、Place 和 Grid,这三个父类都是布局管理器,它们负责管理所包含的组件的大小和位置。
剩下的就是图右边所显示的Widget 的子类了,它们都是Tkinter GUI编程的各种 UI 组件,也就是前面所说的各种“积木块”。
组件概览(已分类)
按钮相关类:
Button:按钮,代表按钮组件
Checkbutton:复选框,可供用户勾选的复选框
Listbox:列表框,列出多个选项,供用户选择
Radiobutton:单选钮,可供用户点边的单选钮
文本相关类:
Entry:单行输入框,用户可输入内容
Text :多行文本框,显示多行文本
框架(容器):
Toplevel 顶层 容器类,可用于为其他组件提供单独的容器;Toplevel 有点类似于窗口
Frame 容器 用于装载其它 GUI 组件
LabelFrame 容器 也是容器组件,类似于Frame,但它支持添加标题
控制条类:
Scale:滑动条 拖动滑块可设定起始值和结束值,可显示当前位置的精确值
Spinbox :微调选择器 用户可通过该组件的向上、向下箭头选择不同的值
Scrollbar:滚动条 用于为组件(文本域、画布、列表框、文本框)提供滚动功能
菜单类:
Menu:菜单 菜单组件
Menubutton:菜单按钮 用来包含菜单的按钮(包括下拉式、层叠式等)
OptionMenu:菜单按钮 Menubutton 的子类,也代表菜单按钮,可通过按钮打开一个菜单
Canvas:画布 提供绘图功能,包括绘制直线、矩形、椭圆、多边形、位图等
Label:标签 用于显示不可编辑的文本或图标
组件通用属性概览
颜色属性:
- activebackground:组件处于激活状态时的背景色;
- activeforeground:组件处于激活状态时的前景色;
- background(bg):组件正常显示时的背景色
- foreground(fg):组件正常显示时的前景色
- highlightbackground:组件在高亮状态下的背景色
- highlightcolor:组件在高亮状态下的前景色
- selectforeground:组在选中状态下的前景色
- selectbackground:组件在选中状态下的背景色
- disabledforeground:组件处于禁用状态时的前景色
文本属性:
- font:组件上显示的文本字体
- justify:组件内部内容的对齐方式;
- 可选值:支持LEFT(左对齐)、CENTER(居中对齐)或RIGHT(右对齐)这三个值
- relief:组件的3D 效果(组件内部相对于外部的外观样式);
- 可选值:RAISED、SUNKEN、FLAT、RIDGE、SOLID、GROOVE。
- text : 组件上显示的文本,文本显示格式由组件本身、anchor 及 justify 选项决定
状态属性:
state: 指定按钮的状态,可选值有正常(normal),激活(active),禁用(disabled);
位置属性:
anchor: 指定按钮上文本的位置,可选值:N, NE, E, SE, S, SW, W, NW, CENTER这些值之一。默认值是CENTER。
图像属性:
- bitmap:在组件上显示该选项指定的位图;
该选项值可以是Tk_GetBitmap接收的任何形式的位图。位图的显示方式受anchor、justify选项的影响。
如果同时指定了bitmap和text,那么bitmap 覆盖文本;如果同时指定了bitmap 和image,那么image 覆盖bitmap
- image:指定组件中显示的图像,如果设置了image 选项,它将会覆盖text、bitmap选项
光标属性:
cursor:指定光标在组件上的样式。可以是Tk_GetCursors 接受的任何格式