1、初识GUI
1.1 什么是GUI
GUI是Graphical User Interface(图形用户界面)的缩写,在GUI中,并不只是输入文本和返回文本,用户可以看到窗口、按钮、文本框等图形,而且可以用鼠标单击,还可以通过键盘输入。
GUI是与程序交互的一种不同的方式。GUI的程序有三个基本要素:输入、处理和输出。
1.2 常用的GUI框架
有很多工具包可以使用,具体介绍wxPython和PyQT
wxPython是Python语言的一套优秀的GUI图形库,允许Python程序员很方便地创建完整的、功能健全的GUI用户界面。
PyQT是QT库的Python版本,支持跨平台。
2、wxPython框架的使用
2.1 安装wxPython
官方网站:http://wxpython.org
安装命令:pip install -U wxPython
出现错误time out处理:使用豆瓣源,加快下载
pip install -i https://pypi.doubanio.com/simple/ --trusted-host pupi.doubanio.com wxpython
2.2 创建一个wx.App的子类
(1)定义这个子类。
(2)在定义的子类中写一个OnInit()初始化方法。
(3)在程序的主要部分创建这个类的一个实例。
(4)调用应用程序实例的MainLoop()方法,这个方法将程序的控制权转交给wxPython.
例:创建一个没有任何功能的子类。代码如下:
# -*- coding:utf-8 -*- import wx # 导入wxPython class App(wx.App): # 定义子类 # 初始化方法 def OnInit(self): frame = wx.Frame(parent=None, title='Hello wxPython') # 创建顶级窗口frame frame.Show() # 显示窗口 return True # 返回值 if __name__ == '__main__': app = App() # 创建App类的实例 app.MainLoop() # 调用App类的MainLoop()主循环方法
应用程序对象————设置窗体属性————》顶级窗口
| ↑ |
| / |
由app对象启动 / 父级/子级关系
| 给事件处理器发送事件 |
↓ / ↓
主循环事件《——在组件中触发事件——————窗体组件
2.3 直接使用wx.App
如果系统中只有一个窗口,可以不用创建wx.App子类,直接使用wx.App
# -*- coding:utf-8 -*- import wx # 导入wxPython app = wx.App() #初始化wx.App类 frame = wx.Frame(None, title='Hello wxPython') #创建顶级窗口frame frame.Show() # 显示窗口 app.MainLoop() #调用App类的MainLoop()主循环方法
2.4 使用wx.Frame框架
在GUI中框架通常也称为窗口。框架是一个容器,用户可以在他的屏幕上任意移动,并可对他进行缩放,它通常包含注入标题连、菜单等等。在wxPython中,wx.Frame是所有框架中的父类。当创建wx.Frame的子类时,子类应该调用其父类的构造器wx.Frame.__init__()。wx.Frame的构造器语法格式如下:
wx.Frame(parent,id=-1,title="",pos=wx.DefaultPostion,size=wx.DefaultSize,style=wx.DEFAULT_FRAME_STYLE,name="frame")
参数说明
parent:框架中的父窗口。如果是顶级窗口,这个值是None。
id:关于新窗口的wxPython ID号。通常设为-1,让wxPython自动生成一个新的ID。
title:窗口的标题。
pos:一个wx.Point对象。指定新窗口左上角在屏幕中的位置,通常(0,0)是显示器的左上角,(-1,-1)默认让系统决定窗口的位置
size:一个wx.Size对象,指定窗口的初始尺寸,(-1,-1)让系统决定窗口的初始位置
style:指定窗口的类型的常量
name:框架的内在名字,使用它来寻找这个窗口。
创建wx.Frame子类的代码如下:
import wx # 导入wxPython模块 class MyFrame(wx.Frame): # 定义子类,继承wx.Frame的初始化 def __init__(self, parent, id): # 定义初始化方法 wx.Frame.__init__(self, parent, id, title="创建Frame", pos=(100, 100), size=(300, 300)) # wx.Frame框架参数设置 if __name__ == "__main__": # 以主函数程序执行 app = wx.App() # 初始化应用 frame = MyFrame(parent=None, id=-1) # 实例MyFrame类,并传递参数 frame.Show() # 显示窗口 app.MainLoop() # 调用MainLoop()主循环方法
小结:
创建应用1、创建一个wx.App的子类
2、直接使用wx.App
3、使用wx.Frame框架
2.5 常见控件
(1)Static Text文本类
功能:在屏幕上绘制纯文本,纯静态文本,可以改变文本的对齐方式、字体和颜色。
语法:wx.StaticText(parent,id,label,pos=wx.DefaultPostition,size=wx.DefaultSize,style=0,name="staticText)
参数:
parent:父窗口不见
id:自增,标识符,使用-1可以自动创建一个唯一的标识。
label:显示在静态控件中的文本内容
pos:一个wx.Point或一个Python元祖,他是窗口部件的位置
size:一个wx.Size或一个Python元祖,他是窗口部件的尺寸
style:样式标记
name:对象的名字
wx.Panel(self)画板
wx.Font类设置字体
wx.Font(pointSize,family,style,weight,underline=False,faceName="",encoding=wx.FONTENCODING_DEFAULT)
参数:
pointSize:字体的整数尺寸,单位为磅
famliy:用于快速指定一个字体而无须知道改字体实际的名字
style:指明字体是否倾斜
weight:指明字体的醒目程度
underline:在window系统下有效,True则加下划线,Fault则无下划线
faceName:指定字体名
encoding:允许在几个编码中选择一个,多数情况使用默认编码。
(2)TextCtrl输入文本类
用于用户输入文本和用户之间的交互,允许多行文本和单行文本,可用于密码空间,掩饰输入的按键。
(3)Button按钮类
用于捕获用户生成的单击事件,最明显的用途是触发绑定到一个处理函数
2.6 BoxSizer布局
前面介绍的控件,为绝对位置。sizer尺寸器用于自动布局一组窗口控件的算法。
纵向:vertical
横向:horizontal
使用BoxSizer
(1)创建BoxSizer——》sizer=wx.BoxSizer(wx.VERTICAL)
(2)添加控制———》sizer.Add()
Add()方法格式:Box.Add(control,porportion,flag,border)
(3)设置sizer———》panel.setsizer(sizer)
2.7事件处理
(1)什么是事件
在组件上实现的操作,称为事件event
(2)绑定事件
程序需要对事件做出反应。利用控件Bind()方法将事件处理函数绑定到给定的事件上
bt_confirm.Bind(wx.EVT_BUTTON,OnclickSubmit)