创建示例GUI程序
1.窗口和组件
窗口(也称框架)是wx.Frame类的实例,wx框架中的部件由父部件使用构造函数的第一个参数创建(创建单独的窗口使用None即可);在调用app.MainLoop前需调用窗口的Show方法,否则会一直隐藏;
import wx
app = wx.App() # 创建框架
win = wx.Frame(None)
btn = wx.Button(win) # 创建按钮
win.Show() # 显示框架
app.MainLoop()
2.标签、标题和位置
创建部件时使用构造函数的label参数可以设定标签,title参数可以设定框架的标题,pos和size参数可以设置位置和尺寸;
import wx
app = wx.App()
win = wx.Frame(None, title="Simple Editor", size=(410, 335))
win.Show()
loadButton = wx.Button(win, label='Open', pos=(315, 5), size=(80, 25)) # 位置包括x和y坐标
saveButton = wx.Button(win, label='Save', pos=(315, 5), size=(80, 25)) # 尺寸包括宽和高
filename = wx.TextCtrl(win, pos=(5, 5), size=(210, 25))
contents = wx.TextCtrl(win, pos=(5, 35), size=(390, 260), style=wx.TE_MULTILINE|wx.HSCROLL)
app.MainLoop()
默认的文本控件是文本框,即一行可编辑的文本,没有滚动条;创建文本区使用style参数调整风格即可,style参数使用按位或运算符OR联合wx模块中具有特殊名字的风格指定;
3.更智能的布局
使用尺寸器可以在wx内进行布局,会管理组件的尺寸:
import wx
app = wx.App()
win = wx.Frame(None, title="Simple Editor", size=(410, 335))
bkg = wx.Panel(win)
loadButton = wx.Button(bkg, label='Open')
saveButton = wx.Button(bkg, label='Save')
filename = wx.TextCtrl(bkg)
contents = wx.TextCtrl(bkg, style=wx.TE_MULTILINE|wx.HSCROLL)
hbox = wx.BoxSizer()
hbox.Add(filename, proportion=1, flag=wx.EXPAND)
hbox.Add(loadButton, proportion=0, flag=wx.LEFT, border=5)
hbox.Add(saveButton, proportion=0, flag=wx.LEFT, border=5)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(hbox, proportion=0, flag=wx.EXPAND|wx.ALL, border=5)
vbox.Add(contents, proportion=1, flag=wx.EXPAND|wx.LEFT|wx.BUTTOM|wx.RIGHT, border=5)
bkg.SetSizer(vbox)
win.Show()
app.MainLoop()
- wx.BoxSizer的构造函数带有决定方向的参数(wx.HORIZONTAL或wx.VERTICAL),默认为水平;
- Add方法的proportion参数根据在窗口改变时所分配的空间设置比例;
- flag参数类似于构造函数的style参数,可使用按位或运算符链接构造符号常量(wx.EXPAND确保组件扩展到所分配的控件,wx.LEFT/wx.RIGHT/wx.TOP/wx.BOTTOM/wx.ALL决定边框参数应用于哪些边);
- border参数用于设置边缘宽度;
4.事件处理
用户执行的操作称为事件,利用部件的Bind方法可以将事件处理函数链接到给定的事件;
loadButton.Bind(wx.EVT_BUTTON, load) # 函数为load