wxpython是python编程语言的一个gui工具箱。他使得python程序员能够轻松的创建具有健壮、功能强大的图形用户界面的程序。它是python语言对流行的wxwidgets跨平台gui工具库的绑定。而wxwidgets是用c++语言写成的。
和python语言与wxwidgetsgui工具库一样,wxpython是开源软件。这意味着任何人都可以免费地使用它并且可以查看和修改它的源代码,或者贡献补丁,增加功能。
wxpython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持的平台有:32位微软windows操作系统、大多数unix或类unix系统、苹果macos x。
下面使用wxpython编写一个简单的记事本程序,可以打开本地文件,编辑,保存。
#!/usr/bin/python import wx def onopen(event): load a file into the textfield. dialog = wx.filedialog(none,'notepad',style = wx.open) if dialog.showmodal() == wx.id_ok: filename.setvalue(dialog.getpath()) file = open(dialog.getpath()) contents.setvalue(file.read()) file.close() dialog.destroy() def onsave(event): save text into the orignal file. if filename.getvalue() == '': dialog = wx.filedialog(none,'notepad',style = wx.save) if dialog.showmodal() == wx.id_ok: filename.setvalue(dialog.getpath()) file = open(dialog.getpath(), 'w') file.write(contents.getvalue()) file.close() dialog.destory() else: file = open(filename.getvalue(), 'w') file.write(contents.getvalue()) file.close() app = wx.app() win = wx.frame(none, title=simple editor, size=(600,400)) bkg = wx.panel(win) # define a 'load' button and its label, # bind to an button event with a function 'load' loadbutton = wx.button(bkg, label='open') loadbutton.bind(wx.evt_button, onopen) # define a 'save' button and its label, # bind to an button event with a function 'save' savebutton = wx.button(bkg, label='save') savebutton.bind(wx.evt_button, onsave) # define a textbox for filename. filename = wx.textctrl(bkg) # define a textbox for file contents. contents = wx.textctrl(bkg, style=wx.te_multiline | wx.hscroll) # use sizer to set relative position of the components. # horizontal layout 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) # vertical layout 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()
运行效果如下图所示:
这个例子是《python基础教程》中的一个例子,并做了一些修改。虽然完成了基本的记事本功能,但是界面略显简单,而且代码也没有很好地遵循面向对象编程原则。
希望本文所述对大家的python程序设计有所帮助。