最近需要做点支持linux的跨平台gui,网上查到了wxPython及Boa,感觉不错,照着Boa文档做做练习。
代码:
App:
1#!/usr/bin/env python2#Boa:App:BoaApp34importwx56importFrame178modules ={'Dialog1': [0,'', u'Dialog1.py'],9'Frame1': [1,'Main frame ofapplication', u'Frame1.py']}1011classBoaApp(wx.App):12defOnInit(self):13self.main =Frame1.create(None)14self.main.Show()15self.SetTopWindow(self.main)16returnTrue1718defmain():19application =BoaApp(0)20application.MainLoop()2122if__name__=='__main__':23main()
Dialog:
1#Boa:Dialog:Dialog123importwx45defcreate(parent):6returnDialog1(parent)78[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1STATICBITMAP1,9wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2,10] = [wx.NewId()for_init_ctrlsinrange(5)]1112classDialog1(wx.Dialog):13def_init_ctrls(self,PRnt):14#generated method, don't edit15wx.Dialog.__init__(self, id=wxID_DIALOG1, name=u'Dialog1', parent=prnt,16pos=wx.Point(365, 232), size=wx.Size(400, 492),17style=wx.DEFAULT_DIALOG_STYLE, title=u'About Notebook')18self.SetClientSize(wx.Size(392, 465))1920self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,21label=u'Note Book - Simple Text Editor', name='staticText1',22parent=self, pos=wx.Point(72, 32), size=wx.Size(220, 19),23style=wx.ALIGN_CENTRE)24self.staticText1.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL,25False, u'Tahoma'))2627self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,28label=u'This is my first Boa app.', name='staticText2',29parent=self, pos=wx.Point(112, 96), size=wx.Size(129, 14),30style=0)31self.staticText2.SetBackgroundColour(wx.Colour(212, 208, 200))3233self.staticBitmap1 = wx.StaticBitmap(bitmap=wx.Bitmap(u'F:/Projects/guide1/6773383_753857.jpg',34wx.BITMAP_TYPE_JPEG), id=wxID_DIALOG1STATICBITMAP1,35name='staticBitmap1', parent=self, pos=wx.Point(48, 152),36size=wx.Size(280, 160), style=0)3738self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label=u'Close',39name='button1', parent=self, pos=wx.Point(152, 328),40size=wx.Size(75, 24), style=0)41self.button1.Bind(wx.EVT_BUTTON, self.OnButton1Button,42id=wxID_DIALOG1BUTTON1)4344def__init__(self, parent):45self._init_ctrls(parent)4647defOnButton1Button(self, event):48self.Close()
Frame:
1#Boa:Frame:Frame12345importwx6importDialog178910defcreate(parent):11returnFrame1(parent)12131415[wxID_FRAME1, wxID_FRAME1STATUSBAR1, wxID_FRAME1TEXTEDITOR,16] = [wx.NewId()for_init_ctrlsinrange(3)]17181920[wxID_FRAME1MENUFILECLOSE, wxID_FRAME1MENUFILEEXIT, wxID_FRAME1MENUFILEOPEN,21wxID_FRAME1MENUFILESAVE, wxID_FRAME1MENUFILESAVEAS,22] = [wx.NewId()for_init_coll_menuFile_Itemsinrange(5)]23242526[wxID_FRAME1MENUHELPABOUT] = [wx.NewId()for_init_coll_menuHelp_Itemsinrange(1)]27282930classFrame1(wx.Frame):31def_init_coll_menuBar1_Menus(self, parent):32#generated method, don't edit33343536parent.Append(menu=self.menuFile, title=u'File')37parent.Append(menu=self.menuHelp, title=u'Help')38394041def_init_coll_menuHelp_Items(self, parent):42#generated method, don't edit43444546parent.Append(help=u'Display Info', id=wxID_FRAME1MENUHELPABOUT,47kind=wx.ITEM_NORMAL, text=u'About')48self.Bind(wx.EVT_MENU, self.OnMenuHelpAboutMenu,49id=wxID_FRAME1MENUHELPABOUT)50515253def_init_coll_menuFile_Items(self, parent):54#generated method, don't edit55565758parent.Append(help='', id=wxID_FRAME1MENUFILEOPEN, kind=wx.ITEM_NORMAL,59text=u'Open')60parent.Append(help='', id=wxID_FRAME1MENUFILESAVE, kind=wx.ITEM_NORMAL,61text=u'Save')62parent.Append(help='', id=wxID_FRAME1MENUFILESAVEAS,63kind=wx.ITEM_NORMAL, text=u'Save As')64parent.Append(help='', id=wxID_FRAME1MENUFILECLOSE, kind=wx.ITEM_NORMAL,65text=u'Close')66parent.Append(help='', id=wxID_FRAME1MENUFILEEXIT, kind=wx.ITEM_NORMAL,67text=u'Exit')68self.Bind(wx.EVT_MENU, self.OnMenuFileOpenMenu,69id=wxID_FRAME1MENUFILEOPEN)70self.Bind(wx.EVT_MENU, self.OnMenuFileSaveMenu,71id=wxID_FRAME1MENUFILESAVE)72self.Bind(wx.EVT_MENU, self.OnMenuFileSaveasMenu,73id=wxID_FRAME1MENUFILESAVEAS)74self.Bind(wx.EVT_MENU, self.OnMenuFileCloseMenu,75id=wxID_FRAME1MENUFILECLOSE)76self.Bind(wx.EVT_MENU, self.OnMenuFileExitMenu,77id=wxID_FRAME1MENUFILEEXIT)78798081def_init_coll_statusBar1_Fields(self, parent):82#generated method, don't edit83parent.SetFieldsCount(1)84858687parent.SetStatusText(number=0, text=u'status')88899091parent.SetStatusWidths([-1])92939495def_init_utils(self):96#generated method, don't edit97self.menuFile = wx.Menu(title=u'File')9899100101self.menuHelp = wx.Menu(title=u'Help')102103104105self.menuBar1 =wx.MenuBar()106107108109self._init_coll_menuFile_Items(self.menuFile)110self._init_coll_menuHelp_Items(self.menuHelp)111self._init_coll_menuBar1_Menus(self.menuBar1)112113114115def_init_ctrls(self, prnt):116#generated method, don't edit117wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,118pos=wx.Point(550, 227), size=wx.Size(400, 492),119style=wx.DEFAULT_FRAME_STYLE, title=u'Notebook')120self._init_utils()121self.SetClientSize(wx.Size(392, 465))122self.SetToolTipString(u'Frame1')123self.SetWindowVariant(wx.WINDOW_VARIANT_LARGE)124self.SetMenuBar(self.menuBar1)125126127128self.statusBar1 = wx.StatusBar(id=wxID_FRAME1STATUSBAR1,129name='statusBar1', parent=self, style=0)130self._init_coll_statusBar1_Fields(self.statusBar1)131self.SetStatusBar(self.statusBar1)132133134135self.textEditor = wx.TextCtrl(id=wxID_FRAME1TEXTEDITOR,136name=u'textEditor', parent=self, pos=wx.Point(0, 0),137size=wx.Size(392, 426), style=wx.TE_MULTILINE, value=u'')138139140141def__init__(self, parent):142self._init_ctrls(parent)143self.FileName =None144145146147defOnMenuFileOpenMenu(self, event):148dlg = wx.FileDialog(self,'Choose a file','.','','*.*', wx.OPEN)149try:150ifdlg.ShowModal() ==wx.ID_OK:151filename =dlg.GetPath()152#Your code153self.textEditor.LoadFile(filename)154self.FileName =filename155self.SetTitle(('Notebook - %s') %filename)156finally:157dlg.Destroy()158159160161defOnMenuFileSaveMenu(self, event):162ifself.FileName ==None:163returnself.OnFileSaveasMenu(event)164else:165self.textEditor.SaveFile(self.FileName)166167defOnMenuFileCloseMenu(self, event):168self.FileName =None169self.textEditor.clear()170self.SetTitle('Notebook')171172173174defOnMenuFileExitMenu(self, event):175self.Close()176177178179defOnMenuHelpAboutMenu(self, event):180dlg =Dialog1.Dialog1(self)181try:182dlg.ShowModal()183finally:184dlg.Destroy()185186187188defOnMenuFileSaveasMenu(self, event):189dlg = wx.FileDialog(self,'Save file as','.','','*.*', wx.SAVE)190try:191ifdlg.ShowModal() ==wx.ID_OK:192filename =dlg.GetPath()193#Your code194self.textEditor.SaveFile(filename)195self.FileName =filename196self.SetTitle(('Notebook - %s') %filename)197finally:198dlg.Destroy()
运行结果图: