git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43711 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			263 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			263 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <?xml version="1.0" encoding="iso-8859-1" ?>
 | |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | |
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 | |
| <head>
 | |
| <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 | |
| <meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" />
 | |
| <title>The wxPython wx Package</title>
 | |
| <meta name="author" content="Patrick K. O'Brien" />
 | |
| <meta name="author" content="Robin Dunn" />
 | |
| <meta name="organization" content="Orbtech" />
 | |
| <meta name="date" content="2004-03-26" />
 | |
| <link rel="stylesheet" href="default.css" type="text/css" />
 | |
| </head>
 | |
| <body>
 | |
| <div class="document" id="the-wxpython-wx-package">
 | |
| <h1 class="title">The wxPython wx Package</h1>
 | |
| <h2 class="subtitle" id="or-how-to-survive-the-new-wx-namespace-changes">Or, how to survive the new wx namespace changes.</h2>
 | |
| <table class="docinfo" frame="void" rules="none">
 | |
| <col class="docinfo-name" />
 | |
| <col class="docinfo-content" />
 | |
| <tbody valign="top">
 | |
| <tr><th class="docinfo-name">Author:</th>
 | |
| <td>Patrick K. O'Brien</td></tr>
 | |
| <tr><th class="docinfo-name">Author:</th>
 | |
| <td>Robin Dunn</td></tr>
 | |
| <tr><th class="docinfo-name">Contact:</th>
 | |
| <td><a class="first last reference" href="mailto:pobrien@orbtech.com">pobrien@orbtech.com</a></td></tr>
 | |
| <tr><th class="docinfo-name">Organization:</th>
 | |
| <td><a class="first last reference" href="http://www.orbtech.com/">Orbtech</a></td></tr>
 | |
| <tr><th class="docinfo-name">Date:</th>
 | |
| <td>2004-03-26</td></tr>
 | |
| <tr><th class="docinfo-name">Revision:</th>
 | |
| <td>1.4</td></tr>
 | |
| </tbody>
 | |
| </table>
 | |
| <div class="contents topic">
 | |
| <p class="topic-title first"><a id="contents" name="contents">Contents</a></p>
 | |
| <ul class="simple">
 | |
| <li><a class="reference" href="#introduction" id="id2" name="id2">Introduction</a></li>
 | |
| <li><a class="reference" href="#why-change-anything" id="id3" name="id3">Why change anything?</a></li>
 | |
| <li><a class="reference" href="#what-does-the-new-wx-package-do" id="id4" name="id4">What does the new wx package do?</a></li>
 | |
| <li><a class="reference" href="#will-any-of-this-effect-my-existing-code" id="id5" name="id5">Will any of this effect my existing code?</a></li>
 | |
| <li><a class="reference" href="#what-about-all-the-other-modules-like-grid-html-and-stc" id="id6" name="id6">What about all the other modules, like grid, html, and stc?</a></li>
 | |
| <li><a class="reference" href="#how-do-i-use-this-new-wx-package" id="id7" name="id7">How do I use this new wx package?</a></li>
 | |
| <li><a class="reference" href="#what-are-the-issues-with-converting-old-code-to-use-the-new-wx-package" id="id8" name="id8">What are the issues with converting old code to use the new wx package?</a></li>
 | |
| <li><a class="reference" href="#where-can-i-find-example-programs-using-the-new-wx-syntax" id="id9" name="id9">Where can I find example programs using the new wx syntax?</a></li>
 | |
| </ul>
 | |
| </div>
 | |
| <div class="section">
 | |
| <h1><a class="toc-backref" href="#id2" id="introduction" name="introduction">Introduction</a></h1>
 | |
| <p>In the begining there was Python, and Python had modules, and Python
 | |
| was good.  But after a time Guido looked on Python and saw that Python
 | |
| needed organizational assistance, and so Guido took code from Python's
 | |
| side and created Packages and then Python was very good.  About this
 | |
| time wxPython was reborn, and wxPython used Packages, but being young
 | |
| and trying to use a new technology wxPython did not know how to use
 | |
| Packages effectivly.  wxPython was good, but dreamed of being much
 | |
| better...</p>
 | |
| <p>Now many years later, after tons of code reorganization and build
 | |
| hacking wxPython has reached that goal.  In version 2.4.1 a prototype
 | |
| of this new structure was introduced that dynamically built at import
 | |
| time a new toplevel package named simply "wx" that contained all the
 | |
| items from wxPython.wx but with the names edited to remove the wx
 | |
| prefix.  Now in 2.5 the final phase of that switcheroo has been
 | |
| completed and the <em>real</em> classes, functions and constants are now
 | |
| located in the wx package, leaving some compatibility modules in
 | |
| wxPython.wx.  This document should answer all the questions you might
 | |
| have concerning the new wx package.  Please also take a look at the
 | |
| <a class="reference" href="MigrationGuide.html">2.5 Migration Guide</a> to see notes about other big differences in
 | |
| this release.</p>
 | |
| </div>
 | |
| <div class="section">
 | |
| <h1><a class="toc-backref" href="#id3" id="why-change-anything" name="why-change-anything">Why change anything?</a></h1>
 | |
| <p>This change is being made for a couple of reasons.  The first reason
 | |
| is to discourage the use of <tt class="docutils literal"><span class="pre">import</span> <span class="pre">*</span></tt>, which is a dangerous
 | |
| technique that can create name conflicts and bloated namespaces.</p>
 | |
| <p>The second reason is to remove what some perceive to be a "wart."  For
 | |
| example, the following code is rather ugly in that the "wx" prefix on
 | |
| the wxFrame class name is no longer useful when you're using the wx
 | |
| module prefix:</p>
 | |
| <pre class="literal-block">
 | |
| from wxPython import wx
 | |
| 
 | |
| class Frame(wx.wxFrame)
 | |
| </pre>
 | |
| <p>The new wx package allows you to write code like this, instead:</p>
 | |
| <pre class="literal-block">
 | |
| import wx
 | |
| 
 | |
| class Frame(wx.Frame)
 | |
| </pre>
 | |
| <p>The third reason is that the wxWindows project has considered doing
 | |
| the same thing (implement a new wx namespace and drop the "wx" prefix)
 | |
| and we want wxPython to lead the way.</p>
 | |
| </div>
 | |
| <div class="section">
 | |
| <h1><a class="toc-backref" href="#id4" id="what-does-the-new-wx-package-do" name="what-does-the-new-wx-package-do">What does the new wx package do?</a></h1>
 | |
| <p>As mentioned in the Introduction, wxPython 2.4.1 introduced a way of
 | |
| getting to this new syntax as quickly as possible.  It would import
 | |
| the old names (like "wxFrame") from the old package and then create new
 | |
| names in the wx package  without the wx prefix, (like "Frame".)
 | |
| Starting with wxPython 2.5 the renaming is moved up to the wxPython
 | |
| build step, so the real classes and etc. are actually named with the
 | |
| new name (like "Frame") and are located in the new wx package.</p>
 | |
| <p>For compatibility the old wxPython package still exists, but now it is
 | |
| populated with modules that simply import the new names and then
 | |
| "reverse-renames" them to the old names.  It probably sounds a bit
 | |
| complicated, but it is mostly automated and so it  doesn't cause
 | |
| problems in most cases.</p>
 | |
| </div>
 | |
| <div class="section">
 | |
| <h1><a class="toc-backref" href="#id5" id="will-any-of-this-effect-my-existing-code" name="will-any-of-this-effect-my-existing-code">Will any of this effect my existing code?</a></h1>
 | |
| <p>No.  Your existing code will continue to work and be supported for
 | |
| some time.  It will be up to you to decide when to switch to the new
 | |
| syntax.  But all new documentation and code examples will use the new
 | |
| syntax.  So don't wait too long.  You wouldn't want anyone calling you
 | |
| old-fashioned, would you?</p>
 | |
| <p>When you import from wxPython.wx and use a class with the old name,
 | |
| such as wxButton, you are actually using the wx.Button class.  I
 | |
| expect that the vast majority of the existing code should work fine
 | |
| using this scheme.  The only things that may cause problems is if your
 | |
| old code is depending on some of the implemtation details, or if you
 | |
| are using other things that have changed in the API.  See the
 | |
| <a class="reference" href="MigrationGuide.html">Migration Guide</a> for more details.</p>
 | |
| </div>
 | |
| <div class="section">
 | |
| <h1><a class="toc-backref" href="#id6" id="what-about-all-the-other-modules-like-grid-html-and-stc" name="what-about-all-the-other-modules-like-grid-html-and-stc">What about all the other modules, like grid, html, and stc?</a></h1>
 | |
| <p>There's more to the old wxPython than just the wxPython.wx module.
 | |
| And we've got those extra modules covered as well.  Each of those
 | |
| modules (as well as the lib subpackage) has been moved to the new wx
 | |
| package and reverse-renamers have been placed in the wxPython package
 | |
| as needed.</p>
 | |
| </div>
 | |
| <div class="section">
 | |
| <h1><a class="toc-backref" href="#id7" id="how-do-i-use-this-new-wx-package" name="how-do-i-use-this-new-wx-package">How do I use this new wx package?</a></h1>
 | |
| <p>The wx package is automatically created when you install wxPython
 | |
| version 2.4.1 or higher.  So all you have to do is:</p>
 | |
| <pre class="literal-block">
 | |
| import wx
 | |
| </pre>
 | |
| </div>
 | |
| <div class="section">
 | |
| <h1><a class="toc-backref" href="#id8" id="what-are-the-issues-with-converting-old-code-to-use-the-new-wx-package" name="what-are-the-issues-with-converting-old-code-to-use-the-new-wx-package">What are the issues with converting old code to use the new wx package?</a></h1>
 | |
| <p>Obviously, you need to change your import statements from:</p>
 | |
| <pre class="literal-block">
 | |
| from wxPython import wx
 | |
| </pre>
 | |
| <p>or:</p>
 | |
| <pre class="literal-block">
 | |
| from wxPython.wx import *
 | |
| </pre>
 | |
| <p>to:</p>
 | |
| <pre class="literal-block">
 | |
| import wx
 | |
| </pre>
 | |
| <p>Then you need to refer to wx attributes without a "wx" prefix, such
 | |
| as:</p>
 | |
| <pre class="literal-block">
 | |
| class MyFrame(wx.Frame):
 | |
| </pre>
 | |
| <p>In most cases, existing code can be modified with a simple search and
 | |
| replace.</p>
 | |
| </div>
 | |
| <div class="section">
 | |
| <h1><a class="toc-backref" href="#id9" id="where-can-i-find-example-programs-using-the-new-wx-syntax" name="where-can-i-find-example-programs-using-the-new-wx-syntax">Where can I find example programs using the new wx syntax?</a></h1>
 | |
| <p>The wxPython demo application and most of the sample apps have been
 | |
| converted to use the new <tt class="docutils literal"><span class="pre">import</span> <span class="pre">wx</span></tt> style of programming with
 | |
| wxPython, so there are lots of examples to look at and to play with.
 | |
| Here is one of them, it is the <tt class="docutils literal"><span class="pre">simple</span></tt> sample.</p>
 | |
| <pre class="literal-block">
 | |
| #----------------------------------------------------------------------
 | |
| # A very simple wxPython example.  Just a wx.Frame, wx.Panel,
 | |
| # wx.StaticText, wx.Button, and a wx.BoxSizer, but it shows the basic
 | |
| # structure of any wxPython application.
 | |
| #----------------------------------------------------------------------
 | |
| 
 | |
| import wx
 | |
| 
 | |
| 
 | |
| class MyFrame(wx.Frame):
 | |
|     """
 | |
|     This is MyFrame.  It just shows a few controls on a wxPanel,
 | |
|     and has a simple menu.
 | |
|     """
 | |
|     def __init__(self, parent, title):
 | |
|         wx.Frame.__init__(self, parent, -1, title,
 | |
|                           pos=(150, 150), size=(350, 200))
 | |
| 
 | |
|         # Create the menubar
 | |
|         menuBar = wx.MenuBar()
 | |
| 
 | |
|         # and a menu 
 | |
|         menu = wx.Menu()
 | |
| 
 | |
|         # add an item to the menu, using \tKeyName automatically
 | |
|         # creates an accelerator, the third param is some help text
 | |
|         # that will show up in the statusbar
 | |
|         menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Exit this simple sample")
 | |
| 
 | |
|         # bind the menu event to an event handler
 | |
|         self.Bind(wx.EVT_MENU, self.OnTimeToClose, id=wx.ID_EXIT)
 | |
| 
 | |
|         # and put the menu on the menubar
 | |
|         menuBar.Append(menu, "&File")
 | |
|         self.SetMenuBar(menuBar)
 | |
| 
 | |
|         self.CreateStatusBar()
 | |
|         
 | |
| 
 | |
|         # Now create the Panel to put the other controls on.
 | |
|         panel = wx.Panel(self)
 | |
| 
 | |
|         # and a few controls
 | |
|         text = wx.StaticText(panel, -1, "Hello World!")
 | |
|         text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))
 | |
|         text.SetSize(text.GetBestSize())
 | |
|         btn = wx.Button(panel, -1, "Close")
 | |
|         funbtn = wx.Button(panel, -1, "Just for fun...")
 | |
| 
 | |
|         # bind the button events to handlers
 | |
|         self.Bind(wx.EVT_BUTTON, self.OnTimeToClose, btn)
 | |
|         self.Bind(wx.EVT_BUTTON, self.OnFunButton, funbtn)
 | |
| 
 | |
|         # Use a sizer to layout the controls, stacked vertically and with
 | |
|         # a 10 pixel border around each
 | |
|         sizer = wx.BoxSizer(wx.VERTICAL)
 | |
|         sizer.Add(text, 0, wx.ALL, 10)
 | |
|         sizer.Add(btn, 0, wx.ALL, 10)
 | |
|         sizer.Add(funbtn, 0, wx.ALL, 10)
 | |
|         panel.SetSizer(sizer)
 | |
|         panel.Layout()
 | |
| 
 | |
| 
 | |
|     def OnTimeToClose(self, evt):
 | |
|         """Event handler for the button click."""
 | |
|         print "See ya later!"
 | |
|         self.Close()
 | |
| 
 | |
|     def OnFunButton(self, evt):
 | |
|         """Event handler for the button click."""
 | |
|         print "Having fun yet?"
 | |
| 
 | |
| 
 | |
| class MyApp(wx.App):
 | |
|     def OnInit(self):
 | |
|         frame = MyFrame(None, "Simple wxPython App")
 | |
|         self.SetTopWindow(frame)
 | |
| 
 | |
|         print "Print statements go to this stdout window by default."
 | |
| 
 | |
|         frame.Show(True)
 | |
|         return True
 | |
|         
 | |
| app = MyApp(redirect=True)
 | |
| app.MainLoop()
 | |
| 
 | |
| 
 | |
| </pre>
 | |
| </div>
 | |
| </div>
 | |
| </body>
 | |
| </html>
 |