Learning wxPython by Example.
The following code shows an example of a wxPython application with a frame containing a menu bar, status bar and panel. The panel contains a label and a button that is bound to an exit function. The menu bar has a Help->About action that is bound to a dialog box. The dialog box shows how to display an HTML message and bring up a link in the user's default browser. You might find this example useful as a starting point that you can adapt. In a larger program it would be best to put the about box code into a separate file so that the main program file does not become too large.
# -*- coding: <<encoding>> -*- #------------------------------------------------------------------------------- # <<project>> # #------------------------------------------------------------------------------- import wxversion wxversion.select("2.8") import wx, wx.html import sys aboutText = """<p>Sorry, there is no information about this program. It is running on version %(wxpy)s of <b>wxPython</b> and %(python)s of <b>Python</b>. See <a href="http://wiki.wxpython.org">wxPython Wiki</a></p>""" class HtmlWindow(wx.html.HtmlWindow): def __init__(self, parent, id, size=(600,400)): wx.html.HtmlWindow.__init__(self,parent, id, size=size) if "gtk2" in wx.PlatformInfo: self.SetStandardFonts() def OnLinkClicked(self, link): wx.LaunchDefaultBrowser(link.GetHref()) class AboutBox(wx.Dialog): def __init__(self): wx.Dialog.__init__(self, None, -1, "About <<project>>", style=wx.DEFAULT_DIALOG_STYLE|wx.THICK_FRAME|wx.RESIZE_BORDER| wx.TAB_TRAVERSAL) hwin = HtmlWindow(self, -1, size=(400,200)) vers = {} vers["python"] = sys.version.split()[0] vers["wxpy"] = wx.VERSION_STRING hwin.SetPage(aboutText % vers) btn = hwin.FindWindowById(wx.ID_OK) irep = hwin.GetInternalRepresentation() hwin.SetSize((irep.GetWidth()+25, irep.GetHeight()+10)) self.SetClientSize(hwin.GetSize()) self.CentreOnParent(wx.BOTH) self.SetFocus() class Frame(wx.Frame): def __init__(self, title): wx.Frame.__init__(self, None, -1, title, pos=(150,150), size=(350,200)) menuBar = wx.MenuBar() menu = wx.Menu() menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Close window and exit program.") self.Bind(wx.EVT_MENU, self.OnClose, id=wx.ID_EXIT) menuBar.Append(menu, "&File") menu = wx.Menu() menu.Append(wx.ID_ABOUT, "&About", "Information about this program") self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT) menuBar.Append(menu, "&Help") self.SetMenuBar(menuBar) self.CreateStatusBar() panel = wx.Panel(self) box = wx.BoxSizer(wx.VERTICAL) m_text = wx.StaticText(panel, -1, "Hello World!") m_text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)) m_text.SetSize(m_text.GetBestSize()) box.Add(m_text, 0, wx.ALL, 10) m_close = wx.Button(panel, wx.ID_CLOSE, "Close") m_close.Bind(wx.EVT_BUTTON, self.OnClose) box.Add(m_close, 0, wx.ALL, 10) panel.SetSizer(box) panel.Layout() self.Show(True) def OnClose(self, event): self.Close() def OnAbout(self, event): dlg = AboutBox() dlg.ShowModal() dlg.Destroy() app = wx.App(False) # Error messages go shell top = Frame("<<project>>") app.SetTopWindow(top) app.MainLoop()
This example is based on the wxPython template that is used in the Luke-SDK IDE.