13_Python基础_Python图形化界面

Python图形化界面
    一、Python中的图形彷界面开发库
    Python中的图形化用户界面开发库有比较多,较为常用的有Tkinter,PyQt,wxPython。
    Tkinter
        Tkinter是Python官方提供的图形用户界面开发库,用于封装TK GUI工具包,跨平台。官方的这个工具包所包含的控件较少,帮助文档不友好,不便于开发复杂的图形用户界面。
    PyQt
        非官方提供的,它用于封装Qt工具包,跨平台。如果要想使用PyQt工具包,得需要再安装额外的软件包
    wxPython
        非官方提供的,跨平台。提供的控制较为丰富,可以用于开发相对复杂的用户界面,帮助文档相对完善友好
    二、wxPython安装
        在Windows平台上通过pip指令安装wxPython。
         13_Python基础_Python图形化界面_第1张图片
    三、wxPython第一个实例程序
        图形用户界面主要由窗口和控件构成,编写wxPython程序其主要是创建窗口和添加控件的过程。
        要构建一个简单的wxPython程序,至少需要一个应用wx.App对象和一个窗口wx.Frame对象
         13_Python基础_Python图形化界面_第2张图片
        注意上面的事件循环:它是一种事件或消息分发处理机制,大部分图形用户界面在界面中的显示及响应用户事件的处理都是通过主事件循环实现的。
        
    四、自定义窗口类
         13_Python基础_Python图形化界面_第3张图片
    五、在窗口中添加控件
        在窗口中添加“面板”、“静态文本”
         13_Python基础_Python图形化界面_第4张图片
        一般来说是把控件放到面板上这们有利于布局,如果要把控件直接放到窗口上也是可以的。
    六、事件处理
        图形界面的控件要响应用户的操作,就必须要添加事件处理机制。一个事件处理包含如下几个内容
            1、事件源:事件发生的场所,就是各个控件。比如:按钮事件的事件源就是控钮
            2、事件:wxPython中事件被封装为事件类,wx.Event及其子类,按钮事件类是:wx.CommandEvent,鼠标事件类是:wx.MoveEvent
            3、事件处理程序:一个响应用户事件的方法
             13_Python基础_Python图形化界面_第5张图片
    七、布局管理
        上面的事件实例中我们的控件写死了指定的位置,这种称为绝对布局,在进行界面布局时尽量不要这样写死布局。
        wxPython提供了布局管理器类帮助实现界面布局,主要分为两大类:盒子布局管理器和网络布局管理器。
        盒子布局管理器
            盒子布局管理器类是:wx.BoxSizer,它是最常用的布局管理器,它可以让其中的子窗口或控件沿垂直或水平方向布局。
            盒子布局管理器对象的构造
wx.BoxSizer(wx.HORIZONTAL) # 设置水平布局方向
wx.BoxSizer(wx.VERTICAL)    # 设置垂直方向布局
            添加子窗口或控件到父窗口
                使用wx.BoxSizer对象的Add()方法添加
Add(window,proportion=0,flag=0,border=0) # 添加到父窗口
Add(sizer,proportion=0,flag=0,border = 0) # 添加到另一个布局对象
                proportion:用来设置当前子窗口或控件在父窗口中所占的空间比例
                flag:布局标志,用来控制对齐方式,边框和调整尺寸
                border:用于设置边框的宽度
                关于flag标志可以用来设置对齐、边框和调整尺寸
                    wx.ALIGN_TOP                        顶对齐
                    wx.ALIGN_BOTTOM                底对齐
                    wx.ALIGN_LEFT                        左对齐
                    wx.ALIGN_RIGHT                     右对齐
                    wx.ALIGN_CENTER                   居中对齐
                    wx.ALIGN_CENTER_VERTICAL        垂直居中对齐
                    wx.ALIGN_CENTER_HORIZONTAL    水平居中对齐
                    wx.TOP            设置有顶部边框,连框的宽度由Add方法中的border指定
                    wx.BOTTN        设置有底部边框
                    wx.LEFT            设置有左边框
                    wx.RIGHT         设置有右边框
                    wx.ALL               设置四边全有边框 
                    wx.EXPAND        调整子窗口或控件完全填满有效空间
                    wx.SHAPED        调整子窗口或控件填充有效空间,但保持高宽比
                    wx.FIXED_MINSIZE        调整子窗口或控件为最小尺寸
                    wx.RESERVE_SPACE_EVEN_IF_HIDDEN        子窗口或控件被 隐藏后所占空间保留
                     13_Python基础_Python图形化界面_第6张图片
                    盒子布局管理器还支持嵌套
                         13_Python基础_Python图形化界面_第7张图片
                             13_Python基础_Python图形化界面_第8张图片
    八、控件
        wxPython的所有控件都继承自wx.Control类。之前的示例已经使用了静态文本与按钮,下面我们看一下其它常用的控件
        文件输入控件      wx.TextCtrl
         13_Python基础_Python图形化界面_第9张图片
        
            复选框和单选按钮
                复选框        wx.CheckBox
                单选按钮        wx.RadioButton    (同一组中多个单选按钮应该是具有互斥性的,当其中一个按钮按下时,其它的要释放)
                  13_Python基础_Python图形化界面_第10张图片
            列表
                列表控件    wx.ListBox
                  13_Python基础_Python图形化界面_第11张图片
            
        静态图片控件
            静态图片控件    wx.StaticBitmap
# coding=utf-8
import wx
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None,title='静态图片控件',size=(300,300))
        self.panel = wx.Panel(parent=self)
        self.bmps = [wx.Bitmap('images/img1.bmp',wx.BITMAP_TYPE_ANY),
                wx.Bitmap('images/img2.bmp',wx.BITMAP_TYPE_ANY),
                wx.Bitmap('images/img3.bmp',wx.BITMAP_TYPE_ANY)]
        b1 = wx.Button(self.panel,id=1,label='Buuton1')
        b2 = wx.Button(self.panel,id=2,label='Buuton2')
        self.Bind(wx.EVT_BUTTON,self.on_click,id=1,id2=2)
        self.image = wx.StaticBitmap(self.panel,bitmap=self.bmps[0])
        # 创建布局管理器
        vbox = wx.BoxSizer(wx.VERTICAL)
        vbox.Add(b1,proportion=1,flag=wx.EXPAND)
        vbox.Add(b2,proportion=1,flag=wx.EXPAND)
        vbox.Add(self.image,proportion=3,flag=wx.EXPAND)
        self.panel.SetSizer(vbox)
    def on_click(self,event):
        event_id = event.GetId()
        if event_id == 1:
            self.image.SetBitmap(self.bmps[1])
        else:
            self.image.SetBitmap(self.bmps[2])
        self.panel.Layout()    # 重置panel面板布局
app = wx.App()    # 创建应用程序对象
frm = MyFrame()    # 创建窗口对象
frm.Show() # 显示窗口
app.MainLoop() # 进入主事件循环
    九、wxPython官文档使用
        1、打开wxpython官网
            https://wxpython.org
             13_Python基础_Python图形化界面_第12张图片 
            2、打开官方API文档
             13_Python基础_Python图形化界面_第13张图片
            3、之后就可以找到对应的类查看类信息及相关方法的说明

你可能感兴趣的:(Python,编程,python)