创建一个GUI窗体最基本的思路:
1.先导入wx模块:import wx
2.创建一个程序:app=wx.App() #实例化主循环
3.创建完程序后,接着建立一个窗口(Frame):win= wx.Frame(None)
4.创建完窗口后,需要显示出来:win.Show()
5.最后运行主程序:app.MainLoop()
简单实例:
代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx
app=wx.App()
win= wx.Frame(None,title='Hello, Word')
win.Show()
app.MainLoop()



实战:制作一个简易记事本
1.界面效果图如下:
创建界面代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx
#1.先画界面
app=wx.App()
win= wx.Frame(None,title='记事本shelly') #创建一个框体,设置标题名
win.Show() #显示出来
#创建2个按纽
openButton = wx.Button(win,label='Open',pos=(225,5),size=(80,25))
saveButton = wx.Button(win,label='Save',pos=(315,5),size=(80,25))
#创建2个文本框
fileName = wx.TextCtrl(win,pos=(5,5),size=(210,25))
fileContent = wx.TextCtrl(win,pos=(5,35),size=(390,260),style=wx.TE_MULTILINE | wx.HSCROLL)
app.MainLoop()



2.界面画好了,开始实现功能效果
思路: 组件----满足-----》条件------触发-----》事件

import wx
#1、定义事件函数
#事件函数有且只有一个参数,叫event
#创建两个事件函数
#定义一个事件绑定到对应的按纽上
def load(event):
	path = fileName.GetValue()
	with open(path,"r",encoding="utf-8") as f: 
	#encoding 设置文件打开时指定为utf8编码,避免写文件时出现编码错误
    fileContent.SetValue(f.read())
	file.close()
def save(event):
	file = open(fileName.GetValue(),'w')
	file.write(fileContent.GetValue())
	file.close()
#1.先画布即制作界面
app=wx.App()
win= wx.Frame(None,title='记事本shelly')
win.Show()
#创建一个打开按纽
openButton = wx.Button(win,label='Open',pos=(225,5),size=(80,25))
#打开按纽绑定事件函数,处理操作
openButton.Bind(wx.EVT_BUTTON,load)saveButton = wx.Button(win,label='Save',pos=(315,5),size=(80,25))
openButton.Bind(wx.EVT_BUTTON,save)fileName = wx.TextCtrl(win,pos=(5,5),size=(210,25))
fileContent = wx.TextCtrl(win,pos=(5,35),size=(390,260),style=wx.TE_MULTILINE | wx.HSCROLL)
app.MainLoop()



wx 组件介绍
可参照标准wxpython 文档:》》》》》》WxPython标准文档在线阅读
1、frame(窗口)

参数:

parent = None #父元素,假如为None,代表顶级窗口
id = None #组件的标识,唯一,假如id为-1代表系统分配id
title = None #窗口组件的名称
pos = None #组件的位置,就是组件左上角点距离父组件或者桌面左和上的距离
size = None #组件的尺寸,宽高
style = None #组件的样式
name = None #组件的名称,也是用来标识组件的,但是用于传值



2、TextCtrl(文本框)

参数:

parent = None #父元素,假如为None,代表顶级窗口
id = None #组件的标识,唯一,假如id为-1代表系统分配id
value = None   #文本框当中的内容
         GetValue #获取文本框的值
         SetValue #设置文本框的值
pos = None #组件的位置,就是组件左上角点距离父组件或者桌面左和上的距离
size = None #组件的尺寸,宽高
style = None #组件的样式
validator = None #验证
name = None #组件的名称,也是用来标识组件的,但是用于传值



3、Button(按钮)

参数:

parent = None #父元素,假如为None,代表顶级窗口
id = None #组件的标识,唯一,假如id为-1代表系统分配id
lable = None #按钮的标签
pos = None #组件的位置,就是组件左上角点距离父组件或者桌面左和上的距离
size = None #组件的尺寸,宽高
style = None #组件的样式
validator = None #验证
name = None #组件的名称,也是用来标识组件的,但是用于传值



4.尺寸器

按照上面的GUI代码有一个缺陷,由于我们各个组件都固定了大小,因此在框体拉伸时,对应的组件不会对应进行拉伸,比较影响用户体验。
为了解决这个问题,我们可以使用尺寸器进行布局,类似于HTML的CSS样式。

1、BoxSizer(尺寸器)

尺寸器作用于画布(panel)
默认水平布局
垂直布局可以调整
按照相对比例

2、步骤

实例化尺寸器(可以是多个)
添加组件到不同尺寸器中
设置相对比例、填充的样式和方向、边框等参数
设置主尺寸器

3、将上面代码通过尺寸器改写如下:

import wx
      #1、定义事件函数
        #事件函数有且只有一个参数,叫event
        #创建两个事件函数
        #定义一个事件绑定到对应的按纽上
   def load(event):
        	path = fileName.GetValue()
        	with open(path,"r",encoding="utf-8") as f: 
        	#encoding 设置文件打开时指定为utf8编码,避免写文件时出现编码错误
            fileContent.SetValue(f.read())
        	file.close()
   def save(event):
        	file = open(fileName.GetValue(),'w')
        	file.write(fileContent.GetValue())
        	file.close()
     #1.先画界面
    app=wx.App()
    win= wx.Frame(None,title='记事本shelly')
    #新增一张画布
    panel = wx.Panel(win)    #创建一个打开按纽
    openButton = wx.Button(panel,label='Open',pos=(225,5),size=(80,25))
    #打开按纽绑定事件函数,处理操作
    openButton.Bind(wx.EVT_BUTTON,load)

    saveButton = wx.Button(panel,label='Save',pos=(315,5),size=(80,25))
    openButton.Bind(wx.EVT_BUTTON,save)
    #修改控件的父对象改成panel 而不是Frame,Panel的父对象是Frame
    fileName = wx.TextCtrl(panel,pos=(5,5),size=(210,25))
    fileContent = wx.TextCtrl(panel,pos=(5,35),size=(390,260),style=wx.TE_MULTILINE | wx.HSCROLL)
    #实例化一个尺寸器,默认水平
    box = wx.BoxSizer()
    box.Add(fileName,proprotion = 5,flag = wx.EXPAND|wx.ALL,border = 3)
     #proportion:相对比例
	#flag:填充的样式和方向,wx.EXPAND为完整填充,wx.ALL为填充的方向
	 #border:边框
	 box.Add(saveButton,proprotion = 2,flag = wx.EXPAND|wx.ALL,border = 3)
	 box.Add(openButton,proprotion = 2,flag = wx.EXPAND|wx.ALL,border = 3)
	 v_box = wx.BoxSizer(wx.VERTICAL)
	  v_box.Add(box,proprotion = 1,flag = wx.EXPAND|wx.ALL,border = 3)
	 v_box.Add(fileContent,proprotion = 5,flag = wx.EXPAND|wx.ALL,border = 3)
	 panel.SetSizer(v_box) #设置主尺寸
	win.Show()
    app.MainLoop()