最近需要做点支持linux的跨平台gui,网上查到了wxPython及Boa,感觉不错,照着Boa文档做做练习。
代码:
App:
1 #!/usr/bin/env python 2 #Boa:App:BoaApp 3 4 import wx 5 6 import Frame1 7 8 modules ={'Dialog1': [0, '', u'Dialog1.py'], 9 'Frame1': [1, 'Main frame of Application', u'Frame1.py']} 10 11 class BoaApp(wx.App): 12 def OnInit(self): 13 self.main = Frame1.create(None) 14 self.main.Show() 15 self.SetTopWindow(self.main) 16 return True 17 18 def main(): 19 application = BoaApp(0) 20 application.MainLoop() 21 22 if __name__ == '__main__': 23 main()
Dialog:
1 #Boa:Dialog:Dialog1 2 3 import wx 4 5 def create(parent): 6 return Dialog1(parent) 7 8 [wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1STATICBITMAP1, 9 wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2, 10 ] = [wx.NewId() for _init_ctrls in range(5)] 11 12 class Dialog1(wx.Dialog): 13 def _init_ctrls(self, prnt): 14 # generated method, don't edit 15 wx.Dialog.__init__(self, id=wxID_DIALOG1, name=u'Dialog1', parent=prnt, 16 pos=wx.Point(365, 232), size=wx.Size(400, 492), 17 style=wx.DEFAULT_DIALOG_STYLE, title=u'About Notebook') 18 self.SetClientSize(wx.Size(392, 465)) 19 20 self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1, 21 label=u'Note Book - Simple Text Editor', name='staticText1', 22 parent=self, pos=wx.Point(72, 32), size=wx.Size(220, 19), 23 style=wx.ALIGN_CENTRE) 24 self.staticText1.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, 25 False, u'Tahoma')) 26 27 self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2, 28 label=u'This is my first Boa app.', name='staticText2', 29 parent=self, pos=wx.Point(112, 96), size=wx.Size(129, 14), 30 style=0) 31 self.staticText2.SetBackgroundColour(wx.Colour(212, 208, 200)) 32 33 self.staticBitmap1 = wx.StaticBitmap(bitmap=wx.Bitmap(u'F:/Projects/guide1/6773383_753857.jpg', 34 wx.BITMAP_TYPE_JPEG), id=wxID_DIALOG1STATICBITMAP1, 35 name='staticBitmap1', parent=self, pos=wx.Point(48, 152), 36 size=wx.Size(280, 160), style=0) 37 38 self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label=u'Close', 39 name='button1', parent=self, pos=wx.Point(152, 328), 40 size=wx.Size(75, 24), style=0) 41 self.button1.Bind(wx.EVT_BUTTON, self.OnButton1Button, 42 id=wxID_DIALOG1BUTTON1) 43 44 def __init__(self, parent): 45 self._init_ctrls(parent) 46 47 def OnButton1Button(self, event): 48 self.Close()
Frame:
1 #Boa:Frame:Frame1 2 3 4 5 import wx 6 import Dialog1 7 8 9 10 def create(parent): 11 return Frame1(parent) 12 13 14 15 [wxID_FRAME1, wxID_FRAME1STATUSBAR1, wxID_FRAME1TEXTEDITOR, 16 ] = [wx.NewId() for _init_ctrls in range(3)] 17 18 19 20 [wxID_FRAME1MENUFILECLOSE, wxID_FRAME1MENUFILEEXIT, wxID_FRAME1MENUFILEOPEN, 21 wxID_FRAME1MENUFILESAVE, wxID_FRAME1MENUFILESAVEAS, 22 ] = [wx.NewId() for _init_coll_menuFile_Items in range(5)] 23 24 25 26 [wxID_FRAME1MENUHELPABOUT] = [wx.NewId() for _init_coll_menuHelp_Items in range(1)] 27 28 29 30 class Frame1(wx.Frame): 31 def _init_coll_menuBar1_Menus(self, parent): 32 # generated method, don't edit 33 34 35 36 parent.Append(menu=self.menuFile, title=u'File') 37 parent.Append(menu=self.menuHelp, title=u'Help') 38 39 40 41 def _init_coll_menuHelp_Items(self, parent): 42 # generated method, don't edit 43 44 45 46 parent.Append(help=u'Display Info', id=wxID_FRAME1MENUHELPABOUT, 47 kind=wx.ITEM_NORMAL, text=u'About') 48 self.Bind(wx.EVT_MENU, self.OnMenuHelpAboutMenu, 49 id=wxID_FRAME1MENUHELPABOUT) 50 51 52 53 def _init_coll_menuFile_Items(self, parent): 54 # generated method, don't edit 55 56 57 58 parent.Append(help='', id=wxID_FRAME1MENUFILEOPEN, kind=wx.ITEM_NORMAL, 59 text=u'Open') 60 parent.Append(help='', id=wxID_FRAME1MENUFILESAVE, kind=wx.ITEM_NORMAL, 61 text=u'Save') 62 parent.Append(help='', id=wxID_FRAME1MENUFILESAVEAS, 63 kind=wx.ITEM_NORMAL, text=u'Save As') 64 parent.Append(help='', id=wxID_FRAME1MENUFILECLOSE, kind=wx.ITEM_NORMAL, 65 text=u'Close') 66 parent.Append(help='', id=wxID_FRAME1MENUFILEEXIT, kind=wx.ITEM_NORMAL, 67 text=u'Exit') 68 self.Bind(wx.EVT_MENU, self.OnMenuFileOpenMenu, 69 id=wxID_FRAME1MENUFILEOPEN) 70 self.Bind(wx.EVT_MENU, self.OnMenuFileSaveMenu, 71 id=wxID_FRAME1MENUFILESAVE) 72 self.Bind(wx.EVT_MENU, self.OnMenuFileSaveasMenu, 73 id=wxID_FRAME1MENUFILESAVEAS) 74 self.Bind(wx.EVT_MENU, self.OnMenuFileCloseMenu, 75 id=wxID_FRAME1MENUFILECLOSE) 76 self.Bind(wx.EVT_MENU, self.OnMenuFileExitMenu, 77 id=wxID_FRAME1MENUFILEEXIT) 78 79 80 81 def _init_coll_statusBar1_Fields(self, parent): 82 # generated method, don't edit 83 parent.SetFieldsCount(1) 84 85 86 87 parent.SetStatusText(number=0, text=u'status') 88 89 90 91 parent.SetStatusWidths([-1]) 92 93 94 95 def _init_utils(self): 96 # generated method, don't edit 97 self.menuFile = wx.Menu(title=u'File') 98 99 100 101 self.menuHelp = wx.Menu(title=u'Help') 102 103 104 105 self.menuBar1 = wx.MenuBar() 106 107 108 109 self._init_coll_menuFile_Items(self.menuFile) 110 self._init_coll_menuHelp_Items(self.menuHelp) 111 self._init_coll_menuBar1_Menus(self.menuBar1) 112 113 114 115 def _init_ctrls(self, prnt): 116 # generated method, don't edit 117 wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt, 118 pos=wx.Point(550, 227), size=wx.Size(400, 492), 119 style=wx.DEFAULT_FRAME_STYLE, title=u'Notebook') 120 self._init_utils() 121 self.SetClientSize(wx.Size(392, 465)) 122 self.SetToolTipString(u'Frame1') 123 self.SetWindowVariant(wx.WINDOW_VARIANT_LARGE) 124 self.SetMenuBar(self.menuBar1) 125 126 127 128 self.statusBar1 = wx.StatusBar(id=wxID_FRAME1STATUSBAR1, 129 name='statusBar1', parent=self, style=0) 130 self._init_coll_statusBar1_Fields(self.statusBar1) 131 self.SetStatusBar(self.statusBar1) 132 133 134 135 self.textEditor = wx.TextCtrl(id=wxID_FRAME1TEXTEDITOR, 136 name=u'textEditor', parent=self, pos=wx.Point(0, 0), 137 size=wx.Size(392, 426), style=wx.TE_MULTILINE, value=u'') 138 139 140 141 def __init__(self, parent): 142 self._init_ctrls(parent) 143 self.FileName = None 144 145 146 147 def OnMenuFileOpenMenu(self, event): 148 dlg = wx.FileDialog(self, 'Choose a file', '.', '', '*.*', wx.OPEN) 149 try: 150 if dlg.ShowModal() == wx.ID_OK: 151 filename = dlg.GetPath() 152 # Your code 153 self.textEditor.LoadFile(filename) 154 self.FileName = filename 155 self.SetTitle(('Notebook - %s') % filename) 156 finally: 157 dlg.Destroy() 158 159 160 161 def OnMenuFileSaveMenu(self, event): 162 if self.FileName == None: 163 return self.OnFileSaveasMenu(event) 164 else: 165 self.textEditor.SaveFile(self.FileName) 166 167 def OnMenuFileCloseMenu(self, event): 168 self.FileName = None 169 self.textEditor.clear() 170 self.SetTitle('Notebook') 171 172 173 174 def OnMenuFileExitMenu(self, event): 175 self.Close() 176 177 178 179 def OnMenuHelpAboutMenu(self, event): 180 dlg = Dialog1.Dialog1(self) 181 try: 182 dlg.ShowModal() 183 finally: 184 dlg.Destroy() 185 186 187 188 def OnMenuFileSaveasMenu(self, event): 189 dlg = wx.FileDialog(self, 'Save file as', '.', '', '*.*', wx.SAVE) 190 try: 191 if dlg.ShowModal() == wx.ID_OK: 192 filename = dlg.GetPath() 193 # Your code 194 self.textEditor.SaveFile(filename) 195 self.FileName = filename 196 self.SetTitle(('Notebook - %s') % filename) 197 finally: 198 dlg.Destroy()
运行结果图: