Python程序设计之GUI(1)

1.GUI常用库

①标准库:tkinter
②扩展库:wxPython、PyGObject、PyQt、PySide

2.wxPython
①使用方法:

a)首先导入wxPython包;

import wx

b)然后建立框架类,框架类的父类名字为wx.Frame,在框架类构造函数种要初始化父类,然后为子类添加各种控件以及1处理办法

class myFrame(wx.Frame):    #继承父类
    def __init__(self,superior):
        wx.Frame.__init__(self,parent=superior,title=u'My First Form',size=(300,300))

c)最后建立主程序,创建应用程序对象、创建框架类对象、显示框架、开始事件循环;执行子类.Show(True)后,框架才可以看见,执行app.MainLoop()后才可以接收并处理事件

if __name__=='__main__':
    #创建应用程序
     app=wx.App()
    #创建框架类对象
     frame=myFrame(None)
    #显示框架
     frame.Show(True)
    #使得控件可以接收和处理事件
     app.MainLoop()
②第一个GUI程序:
a)框架类的构造函数:
class myFrame(wx.Frame):    #继承父类
    def __init__(self,superior):
        wx.Frame.__init__(self,parent=superior,title=u'My First Form',size=(300,300))   #调用父类初始化自己的框架

        #为按钮绑定事件自己的事件,改变大小和移动窗体
        self.Bind(wx.EVT_SIZE,self.OnSize)
        self.Bind(wx.EVT_MOVE,self.OnFrameMove)

        #添加一个pane和一些控件来展示位置和大小
        panel=wx.Panel(self,-1)
        label1=wx.StaticText(panel,-1,'FrameSize:')
        label2=wx.StaticText(panel,-1,'FramePos:')
        label3=wx.StaticText(parent=panel,label='MousePos:')
        #初始化窗体大小,位置和鼠标位置
        self.sizeFrame=wx.TextCtrl(panel,-1,"",style=wx.TE_READONLY)
        self.posFrame=wx.TextCtrl(panel,-1,"",style=wx.TE_READONLY)
        self.posMouse=wx.TextCtrl(panel,-1,"",style=wx.TE_READONLY)
        panel.Bind(wx.EVT_MOTION,self.OnMouseMove)  #绑定事件处理函数
        self.panel=panel

        #为窗体的布局设置样式
        sizer=wx.FlexGridSizer(3,2,5,5)
        sizer.Add(label1)
        sizer.Add(self.sizeFrame)
        sizer.Add(label2)
        sizer.Add(self.posFrame)
        sizer.Add(label3)
        sizer.Add(self.posMouse)

        #边框设置
        border=wx.BoxSizer()
        border.Add(sizer,0,wx.ALL,15)
        panel.SetSizerAndFit(border)
        self.Fit()

b)框架类的事件

    def OnSize(self,event):          #设置窗体的大小
        size=event.GetSize()
        print('打印窗体大小:',size,end='\n')
        self.sizeFrame.SetValue("%s,%s"%(size.width,size.height))
        event.Skip()

    def OnFrameMove(self,event):    #窗体1移动事件处理函数
        pos=event.GetPosition()
        print('打印窗体位置:',pos,end='\n')
        self.posFrame.SetValue("%s,%s"%(pos.x,pos.y))

    def OnMouseMove(self,event):    #鼠标移动事件处理函数
        pos = event.GetPosition()
        print('打印鼠标位置:',pos,end='\n')
        self.posMouse.SetValue("%s,%s" % (pos.x, pos.y))

c)主程序

if __name__=='__main__':
    #创建应用程序
     app=wx.App()
    #创建框架类对象
     frame=myFrame(None)
    #显示框架
     frame.Show(True)
    #使得控件可以接收和处理事件
     app.MainLoop()

d)运行结果
在这里插入图片描述

③代码分析
a)父类构造函数
  __init__(self,Window parent,ind id=-1,String title=EmptyString,Point pos=DefaultPosition,Size size=DefaultSize,long style=DEFAULT_FRAME_STYLE.String name=Framename)

parent:框架的父窗体,值为None时表示创建顶级窗体
id:新窗体的wxPythonID号,可以明确传递一个唯一的ID,值为-1时,wxPython自动生成一个ID
title:窗口的标题
pos:用来指定新窗体的左上角在屏幕中的位置,通常(0,0)表示屏幕左上角的位置;DefaultPosition=(-1,-1)表示有系统决定位置
size:指定新窗体初始大小,当其为DefaultSize=(-1,-1)时,表示由系统来决定初始化大小
style:指定窗体类型的常量,有多种样式
name:框架的名字,指定后可以通过名字来寻找窗体

b)常用style参数设置

添加标题栏:wx.CAPTION
默认样式:wx.DEFAULT_FRAME_STYLE
关闭按钮:wx.CLOSE_BOX
最大化按钮:wx.MAXIMIZE_BOX
最小化按钮:wx.MINIMIZE_BOX
边框可以改变尺寸:wx.RESIZE_BORDER
边框没有装饰SIM:wx.PLE_BORDER
增加系列菜单:wx.SYSTEM_MENU
创建非矩形窗体:wx.FRAME_SHAPED
设置工具框:wx.FRAME_TOOL_WINDOW
使用方法可以叠加使用:

style=wx.FRAME_TOOL_WINDOW|wx.FRAME_SHAPED|wx.RESIZE_BORDER

不能改变窗体的大小和缩放

style=wx.DEFAULT_FRAME_STYLE^(wx.MINIMIZE_BOX|wx.MAXIMIZE_BOX|wx.RESIZE_BORDER)
学习笔记:

1.使用wxPython创建窗体的三个步骤;
2.style样式设置可以叠加使用;
3.name属性值指定后可以原来搜索窗体;
4.在初始化窗体时可以明确传递一个ID,如果无法确定使用哪一个ID,可以通过wx.NewId()方法来生成ID,避免确保ID唯一性的麻烦;

id=wx.NewId()
frame=wx.Frame.__init__(None,id)

也可以使用全局变量来实现创建ID

wx.ID_ANY(值为-1

通过GetId()方法来查看ID

frame=wx.Frame.__init__(None,-1)
id=frame.GetId()
发布了78 篇原创文章 · 获赞 83 · 访问量 5402

猜你喜欢

转载自blog.csdn.net/qxyloveyy/article/details/104720357