用Pythonwx模块创建文本编辑器的方法:
1、设置按钮的位置
importwx app=wx.App() win=wx.Frame(None,title="编辑器",size=(410,335)) win.Show() loadButton=wx.Button(win,label='打开',pos=(225,5),size=(80,25)) saveButton=wx.Button(win,label='保存',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()
2、布局窗口内容
importwx app=wx.App() win=wx.Frame(None,title="编辑器",size=(410,335)) bkg=wx.Panel(win) loadButton=wx.Button(bkg,label='打开') saveButton=wx.Button(bkg,label='保存') filename=wx.TextCtrl(bkg) contents=wx.TextCtrl(bkg,style=wx.TE||MULTILILINE||||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.BOTTOM|wx.RIGHT,border=5) bkg.SetSizer(vbox) win.Show() app.MainLoop()
3、添加事件处理函数
在GUI术语中,用户执行的动作(如点击按钮)称为事件。我们需要让程序注意这些事件并做出反应。 假设写一个负责打开文件的函数,并将其命令为load,然后将函数作为loadbuttton的事件处理函数如下: loadButton.Bind(wx.EVT_BUTTON,load) 让我们完成剩下的工作。我们现在需要的是两个事件处理函数:load(打开)和save(保存)。当事件被调用时,它会收到事件对象作为其唯一的参数,包括发生了什么,但这里可以忽略这种方法,因为程序只关心点击时发生的事情。 defload(event): file=open(filename.GetValue()) contents.SetValue(file.read()) file.close() 使用filename对象Getvalue方法获取文件名。只要使用contentss,为了将文本引入文本区域.Setvalue就可以了。 save函数类似于load,除了它需要写入(‘w),以及文件处理部分的write方法,Getvalue用于从文本区域获取信息。 defsave(event): file=open(filename.GetValue(),'w') file.write(contents.GetValue()) file.close()
完整的代码如下:
importwx defload(event): file=open(filename.GetValue()) contents.SetValue(file.read()) file.close() defsave(event): file=open(filename.GetValue(),'w') file.write(contents.GetValue()) file.close() app=wx.App() win=wx.Frame(None,title="编辑器",size=(410,335)) bkg=wx.Panel(win) loadButton=wx.Button(bkg,label='打开') loadButton.Bind(wx.EVT_BUTTON,load) saveButton=wx.Button(bkg,label='保存') saveButton.Bind(wx.EVT_BUTTON,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.BOTTOM|wx.RIGHT,border=5) bkg.SetSizer(vbox) win.Show() app.MainLoop()
结果如下: