构建一个最简单的wxPython 程序至少需要一个wx.App 对象和一个wx.Frame 对象。
模板:
import wx # 加载模块
# 继承窗体类
class MyFrame(wx.Frame):
def __init__(self):
# 初始化父类
super().__init__(parent=None,title="第一个窗体程序!",size=(500,200))
self.Center() # 设置窗口居中
# 这里可以添加自己的设计代码
# ·······
# 这里可以添加自己的设计代码
# wx.App 对象代表当前应用程序
class App(wx.App):
def OnInit(self):
myFrame=MyFrame() # 创建窗体实例
myFrame.Show() # 显示窗口
return True
def OnExit(self):
print(' 应用程序退出')
return 0
if __name__ =="__main__":
app=App() # 创建应用程序对象
app.MainLoop() # 进入主事件循环
一、wx.Frame类介绍:
wx.Frame(parent, id=-1, title= "", pos=wx.DefaultPosition, size=wx.DefaultSize,style=wx.DEFAULT_FRAME_STYLE,name="frame")
parent : 框架的父窗口。对于顶级窗口,这个值是None 。 id : 关于新窗口的wxPython ID 号。可以明确地传递一个 值。如果 传递-1 ,wxPython 自动生成一个新的ID 。 title : 窗口的标题。 pos : 一个wx.Point 对象,它指定这个新窗口的左上角在屏幕中的位置。 size : 一个wx.Size 对象,它指定这个窗口的初始尺寸。(-1,-1) 将让系统决定窗口的初始尺寸。 style: 指定窗口的类型的常量。可以使用或运算来组合它们。 name : 框架的内在的名字。以后可以使用它来寻找这个窗口。
二、窗体布局
wxPython 提供了8 个布局管理器类,包括wx.Sizer 、wx.BoxSizer 、wx.StaticBoxSizer 、wx.WrapSizer 、wx.StdDialogButtonSizer 、wx.GridSizer 、wx.FlexGridSizer 、wx.GridBagSizer。
其中wx.Sizer 是布局管理器的根类, 一般不会直接使用wx.Sizer ,而是使用它的子类 ,最常用的有:wx.BoxSizer 、wx.StaticBoxSizer 、wx.GridSizer 和wx.FlexGridSizer 。
1. Box 布局
Box 布局类是wx.BoxSizer ,Box 布局是所有布局中最常用的,它可以让其中的子窗口(或控件)沿垂直或水平方向布局,创建wx.BoxSizer 对象时可以指定布局方向。
当需要添加子窗口(或控件)到父窗口时,需要调用wx.BoxSizer 对象Add() 方法,Add() 方法是从父类wx.Sizer 继承而来的,Add() 方法的语法说明如下: Add(window, proportion=0, flag=0, border=0, userData=None)
Add(sizer, proportion=0, flag=0, border=0,userData=None)
Add(size, proportion=0, flag=0, border=0, userData=None)
其中proportion 参数仅被wx.BoxSizer 使用,用来设置当前子窗口(或控件)在父窗口所占空间比例 ,proportion=0 表示保持本身大小;flag 是参数标志,用来控制对齐、边框和调整尺寸;border 参数用来设置边框的宽度;userData参数可被用来传递额外的数据。
flag标志: 对齐
边框
尺寸
2. StaticBox 布局
StaticBox 布局类是wx.StaticBoxSizer ,继承于wx.BoxSizer 。StaticBox 布局等同于Box ,只是在Box 周围多了一个附加的带静态文本的边框。
3. Grid 布局
Grid 布局类是wx.GridSizer ,Grid 布局以网格形式对子窗口(或控件)进行摆放,容器被分成大小相等的矩形,一个矩形中放置一个子窗口(或控件)。
四种构造方法: wx.GridSizer(rows, cols, vgap, hgap) : 创建指定行数和列数的wx.GridSizer 对象,并指定水平和垂直间隙,参数hgap 是水平间隙,参数vgap 是垂直间隙。添加的子窗口(或控件)个数超过rows 与cols之积,则引发异常。
wx.GridSizer(rows, cols, gap) : 同wx.GridSizer(rows, cols,vgap, hgap) ,gap 参数指定垂直间隙和水平间隙,gap 参数是wx.Size 类型,例如wx.Size(2, 3) 是设置水平间隙为2 像素,垂直间隙为3 像素。
wx.GridSizer(cols, vgap, hgap) : 创建指定列数的wx.GridSizer 对象,并指定水平和垂直间隙。由于没有限定行数,所以添加的子窗口(或控件)个数没有限制。
wx.GridSizer(cols, gap=wx.Size(0, 0)) : wx.GridSizer(cols,vgap, hgap) ,gap 参数指定垂直间隙和水平间隙,gap 参数是wx.Size类型。
import wx
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(parent=None,title="Grid布局",size=(300,300))
self.Center()
panel=wx.Panel(self)
grid= wx.GridSizer(3,3,1,1)
for i in range(9):
item=wx.Button(parent=panel,id=-1,label=str(i+1))
grid.Add(item,1,flag=wx.EXPAND)
panel.SetSizer(grid) # 设置布局
class App(wx.App):
def OnInit(self):
frame=MyFrame()
frame.Show()
return True
if __name__=="__main__":
app=App()
app.MainLoop()
4. FlexGrid 布局
Grid 布局时网格大小是固定的,如果想网格大小不同可以使用FlexGrid。 FlexGrid 布局类是wx.FlexGridSizer ,它的父类是wx.GridSizer 。
wx.FlexGridSizer 的构造方法与wx.GridSizer