常用的GUI库
- Tkinter
tkinter(Tk interface)是Python的标准GUI库,支持跨平台的GUI程序开发。tkinter适合小型的GUI程序编写,也特别适合初学者学习GUI编程。
- wxPython
wxPython是比较流行的GUI库,适合大型应用程序开发,功能强于tkinter,整体设计框架类似于MFC(Microsoft Foundation Classes微软基础类库)
- PyQT
Qt是一种开源的GUI库,适合大型GUI程序开发,PyQT是Qt工具包标准的Python实现。我们也可以使用Qt Desginer界面设计器快速开发GUI应用程序
GUI编程的核心步骤和第一个GUI程序
基于tkinter模块创建GUI程序包含如下4个核心步骤:
- 创建应用程序主窗口对象(也称:根窗口)通过类Tk的无参构造函数
- 在主窗口中,添加各种可视化组件,比如:按钮(Button)、文本框(Label)等
- 通过几何布局管理器,管理组件的大小和位置
- 事件处理,通过绑定事件处理程序,响应用户操作所触发的事件(比如:单击、双击等)
【示例】使用tkinter模块,创建GUI应用程序,并实现点击按钮的事件处理 :
from tkinter import * from tkinter import messagebox root = Tk() btn01 = Button(root) btn01["text"] = "点我就送花" btn01.pack() def songhua(e): messagebox.showinfo("Message","送你一朵玫瑰花,请你爱上我") print("送你99朵玫瑰花") btn01.bind("",songhua) #为按钮绑定事件 root.mainloop() #调用组件的mainloop方法,进入事件循环
GUI应用程序类的经典写法
GUI应用程序编写的一个主要结构,采用了面向对象的方式,更加合理的组织代码。
通过类Application组织整个GUI程序,类Application继承了Frame及通过继承拥有了父类的特性。通过构造函数__init__()初始化窗口中的对象,通过createWidgets()方法创建窗口中的对象。
Frame框架是一个tkinter组件,表示一个矩形的区域。Frame一般作为容器使用,可以放置其他组件,从而实现复杂的布局。
【示例】标准的GUI程序类的写法
from tkinter import * from tkinter import messagebox class Application(Frame): """一个经典的GUI程序的类的写法""" def __init__(self, master=None): super().__init__(master) # super()代表的是父类的定义,而不是父类对象 self.master = master self.pack() self.createWidget() def createWidget(self): """在此区域进行创建组件""" if __name__ == '__main__': root = Tk() root.geometry("400x100+200+300") root.title("一个经典的GUI程序类写法") app = Application(master=root) root.mainloop()
面向对象的GUI写法是后面经常要使用到的,这种写法建议必须掌握
常用组件汇总列表
Tkinter类 | 名称 | 简介 |
Toplevel | 顶层 | 容器类,可用于为其他组件提供单独的容器;Toplevel 有点类似于窗口 |
Button | 按钮 | 代表按钮组件 |
Canvas | 画布 | 提供绘图功能,包括直线、矩形、椭圆、多边形、位图等 |
Checkbutton | 复选框 | 可供用户勾选的复选框 |
Entry | 单行输入框 | 用户可输入内容 |
Frame | 容器 | 用于装载其它 GUI 组件 |
Label | 标签 | 用于显示不可编辑的文本或图标 |
LabelFrame | 容器 | 也是容器组件,类似于Frame,但它支持添加标题 |
Listbox | 列表框 | 列出多个选项,供用户选择 |
Menu | 菜单 | 菜单组件 |
Menubutton | 菜单按钮 | 用来包含菜单的按钮(包括下拉式、层叠式等) |
OptionMenu | 菜单按钮 | Menubutton 的子类,也代表菜单按钮,可通过按钮打开一个菜单 |
Message | 消息框 | 类似于标签,但可以显示多行文本;后来当 Label 也能显示多行文本之后,该组件基本处于废弃状态 |
PanedWindow | 分区窗口 | 该容器会被划分成多个区域,每添加一个组件占一个区域,用户可通过拖动分隔线来改变各区域的大小 |
Radiobutton | 单选钮 | 可供用户点边的单选钮 |
Scale | 滑动条 | 拖动滑块可设定起始值和结束值,可显示当前位置的精确值 |
Spinbox | 微调选择器 | 用户可通过该组件的向上、向下箭头选择不同的值 |
Scrollbar | 滚动条 | 用于为组件(文本域、画布、列表框、文本框)提供滚动功能 |
Text | 多行文本框 | 显示多行文本 |