看了一点python的基础教程,忍不住手就痒了,找来一个题目练一下喽。


题目:编写一个功能简单的记事本。
编写记事本就要用到GUI的功能,最常用的当然是wxpython,那么我们就用这个来写一个记事本的程序吧。
首先来一些基本的功能调用,先熟悉一下它的基本构成:
import wx
app=wx.App()
win=wx.Frame(None)
win.Show()
app.MainLoop()
我们来分析一下这个程序的语句:
import wx是引入了wxpython模块,wx.App()生成了一个应用程序,wx.Frame(None)生成了一个窗口的框架,用win.Show()显示出来,最后对于程序不断循环。
这样就编写了一个比较简单的窗口程序了,不过这个窗口什么也没有,现在慢慢来将其内容充实起来吧。
先把这个空白的窗口加上一些标题(title)
import wx
app=wx.App()
win=wx.Frame(None,title='简单记事本')
win.Show()
app.MainLoop()
我们所需要的记事本编辑器肯定得有两个功能,第一能打开文件,第二能保存文件,那么至少需要这两个按钮,一个是打开,一个是保存,按钮的生成用wx.Button()实现。
按钮的位置大小等等的确定需要各种参数,那么怎么修改上面的程序呢?接着往下来:
import wx
app=wx.App()
win=wx.Frame(None,title='简单记事本'size=(410,335))
loadbutton=wx.Button(win,label='open',pos=(5,5),size=(80,25))
savebutton=wx.Button(win,label='save',pos=(90,5),size=(80,25))
win.Show()
app.MainLoop()
仅有按钮还是不行的,还得有打开目录的编辑区域和文本的编辑区域,就得用到wx.TextCtrl()这个函数来,继续修改以上程序:
import wx
app=wx.App()
win=wx.Frame(None,title='简单记事本',size=(410,335))
fileload=wx.TextCtrl(win,pos=(5,5),size=(230,25))
contents=wx.TextCtrl(win,pos=(5,35),size=(400,300))
loadbutton=wx.Button(win,label='open',pos=(240,5),size=(80,25))
savebutton=wx.Button(win,label='save',pos=(325,5),size=(80,25))
win.Show()
app.MainLoop()


一个简单的模型就出来了吧,哈哈。但是这个记事本在拖拉时其编辑内容却不能随拖拉的变化而变化,而是保持原来的形状完全不变,而且文件编辑区也不能随意多行处理,要想其变化,还得对其修改:
import wx
app=wx.App()
win=wx.Frame(None,title='简单记事本',size=(410,335))
bg=wx.Panel(win)

fileload=wx.TextCtrl(bg)
contents=wx.TextCtrl(bg,style=wx.TE_MULTILINE|wx.HSCROLL)
loadbutton=wx.Button(bg,label='open')
savebutton=wx.Button(bg,label='save')

level=wx.BoxSizer()
level.Add(fileload,proportion=1,flag=wx.EXPAND)
level.Add(loadbutton,proportion=0,flag=wx.LEFT,border=5)
level.Add(savebutton,proportion=0,flag=wx.LEFT,border=5)

down=wx.BoxSizer(wx.VERTICAL)
down.Add(level,proportion=0,flag=wx.EXPAND|wx.ALL,border=5)
down.Add(contents,proportion=1,flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.BOTTOM,border=5)

bg.SetSizer(down)

win.Show()
app.MainLoop()


用这个程序写出来的记事本基本上只是个框架而已,他没有打开与保存文件的功能,那么怎么才能实现打开与保存文件的功能呢?这里用到了wx.Bind()函数,所以前面的程序可以将其改写成
import wx
app=wx.App()
win=wx.Frame(None,title='简单记事本',size=(410,335))
bg=wx.Panel(win)
def load(event):
   a=open(fileload.GetValue())
   contents.SetValue(a.read())
   a.close()

def save(event):
   c=open(fileload.GetValue(),'w')
   c.write(contents.GetValue())
   c.close()

fileload=wx.TextCtrl(bg)
contents=wx.TextCtrl(bg,style=wx.TE_MULTILINE|wx.HSCROLL)

loadbutton=wx.Button(bg,label='open')
savebutton=wx.Button(bg,label='save')
loadbutton.Bind(wx.EVT_BUTTON,load)
savebutton.Bind(wx.EVT_BUTTON,save)

level=wx.BoxSizer()
level.Add(fileload,proportion=1,flag=wx.EXPAND)
level.Add(loadbutton,proportion=0,flag=wx.LEFT,border=5)
level.Add(savebutton,proportion=0,flag=wx.LEFT,border=5)

down=wx.BoxSizer(wx.VERTICAL)
down.Add(level,proportion=0,flag=wx.EXPAND|wx.ALL,border=5)
down.Add(contents,proportion=1,flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.BOTTOM,border=5)

bg.SetSizer(down)

win.Show()
app.MainLoop()
这个程序就可以完成了,当然你也可以在自定义函数load()中修改,使其变为:当没有此文件时创建一个,然后对其编辑。这里就不多说了,你可以自己实践啊,哈哈。

总结:通过这个简单记事本编辑器的编写,我们基本上掌握了一些简单的图形编辑功能,那么,很显然我们还可以编写一个简单计算器,当然你要是想要编写一个很复杂的科学计算器也不是不可能实现不了的。