Size: 3805
Comment:
|
Size: 5225
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 3: | Line 3: |
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. | 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. If this example is too large to start with then see the second example. |
Line 50: | Line 50: |
wx.Frame.__init__(self, None, -1, title, pos=(150,150), size=(350,200)) | wx.Frame.__init__(self, None, title=title, pos=(150,150), size=(350,200)) |
Line 53: | Line 53: |
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) |
m_exit = menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Close window and exit program.") self.Bind(wx.EVT_MENU, self.OnClose, m_exit) |
Line 57: | Line 57: |
menu.Append(wx.ID_ABOUT, "&About", "Information about this program") self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT) |
m_about = menu.Append(wx.ID_ABOUT, "&About", "Information about this program") self.Bind(wx.EVT_MENU, self.OnAbout, m_about) |
Line 62: | Line 62: |
self.CreateStatusBar() | self.statusbar = self.CreateStatusBar() |
Line 78: | Line 78: |
self.Show(True) | |
Line 88: | Line 87: |
app = wx.App(False) # Error messages go shell | app = wx.App(redirect=True) # Error messages go to popup window |
Line 90: | Line 89: |
top.Show() | |
Line 94: | Line 94: |
This example is based on the wxPython template that is used in the [[http://luke-sdk.berlios.de|Luke-SDK ]] IDE. | The following is a minimum wxPython application in the tradition of Hello World: {{{ import wx app = wx.App(redirect=True) top = wx.Frame(None, title="Hello World", size=(300,200)) top.Show() app.SetTopWindow(top) app.MainLoop() }}} * The first thing to do in the main program is to create the wx.App object that provides the event loop. You need to do this first because some other objects use it behind the scenes. * The topmost GUI interface element, or ''widget'', is the wx.Frame. All it consists of is an empty rectangular frame with a title bar. In all but this very basic example the frame would be sub-classed to allow the definition of further widgets and call-back functions within it. * The frame and its contents are not displayed automatically. You must explicitly call the Show() function. * The application needs to know which is the main frame. * At this point the application is visible on the screen but is not responding to events. You must call the Main Loop function to do this but note that once started the event loop never returns. Although no events have been defined explicitly there are some event handlers provided by wxPython. If you click on the X icon on the title bar the application receives a wx.ID_EXIT event that tells the application to terminate. The full example is based on the wxPython template that is used in the [[http://luke-sdk.berlios.de|Luke-SDK ]] IDE. |
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. If this example is too large to start with then see the second example.
# -*- 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, title=title, pos=(150,150), size=(350,200)) menuBar = wx.MenuBar() menu = wx.Menu() m_exit = menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Close window and exit program.") self.Bind(wx.EVT_MENU, self.OnClose, m_exit) menuBar.Append(menu, "&File") menu = wx.Menu() m_about = menu.Append(wx.ID_ABOUT, "&About", "Information about this program") self.Bind(wx.EVT_MENU, self.OnAbout, m_about) menuBar.Append(menu, "&Help") self.SetMenuBar(menuBar) self.statusbar = 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() def OnClose(self, event): self.Close() def OnAbout(self, event): dlg = AboutBox() dlg.ShowModal() dlg.Destroy() app = wx.App(redirect=True) # Error messages go to popup window top = Frame("<<project>>") top.Show() app.SetTopWindow(top) app.MainLoop()
The following is a minimum wxPython application in the tradition of Hello World:
import wx app = wx.App(redirect=True) top = wx.Frame(None, title="Hello World", size=(300,200)) top.Show() app.SetTopWindow(top) app.MainLoop()
- The first thing to do in the main program is to create the wx.App object that provides the event loop. You need to do this first because some other objects use it behind the scenes.
The topmost GUI interface element, or widget, is the wx.Frame. All it consists of is an empty rectangular frame with a title bar. In all but this very basic example the frame would be sub-classed to allow the definition of further widgets and call-back functions within it.
- The frame and its contents are not displayed automatically. You must explicitly call the Show() function.
- The application needs to know which is the main frame.
- At this point the application is visible on the screen but is not responding to events. You must call the Main Loop function to do this but note that once started the event loop never returns. Although no events have been defined explicitly there are some event handlers provided by wxPython. If you click on the X icon on the title bar the application receives a wx.ID_EXIT event that tells the application to terminate.
The full example is based on the wxPython template that is used in the Luke-SDK IDE.