1 =========================
 
   2  The wxPython wx Package
 
   3 =========================
 
   5 --------------------------------------------------
 
   6  Or, how to survive the new wx namespace changes.
 
   7 --------------------------------------------------
 
   9 :Author: Patrick K. O'Brien
 
  11 :Contact: pobrien@orbtech.com
 
  12 :Organization: Orbtech_
 
  16 .. _Orbtech: http://www.orbtech.com/
 
  24 In the begining there was Python, and Python had modules, and Python
 
  25 was good.  But after a time Guido looked on Python and saw that Python
 
  26 needed organizational assistance, and so Guido took code from Python's
 
  27 side and created Packages and then Python was very good.  About this
 
  28 time wxPython was reborn, and wxPython used Packages, but being young
 
  29 and trying to use a new technology wxPython did not know how to use
 
  30 Packages effectivly.  wxPython was good, but dreamed of being much
 
  33 Now many years later, after tons of code reorganization and build
 
  34 hacking wxPython has reached that goal.  In version 2.4.1 a prototype
 
  35 of this new structure was introduced that dynamically built at import
 
  36 time a new toplevel package named simply "wx" that contained all the
 
  37 items from wxPython.wx but with the names edited to remove the wx
 
  38 prefix.  Now in 2.5 the final phase of that switcheroo has been
 
  39 completed and the *real* classes, functions and constants are now
 
  40 located in the wx package, leaving some compatibility modules in
 
  41 wxPython.wx.  This document should answer all the questions you might
 
  42 have concerning the new wx package.  Please also take a look at the
 
  43 `2.5 Migration Guide`_ to see notes about other big differences in
 
  46 .. _2.5 Migration Guide: MigrationGuide.html
 
  51 This change is being made for a couple of reasons.  The first reason
 
  52 is to discourage the use of ``import *``, which is a dangerous
 
  53 technique that can create name conflicts and bloated namespaces.
 
  55 The second reason is to remove what some perceive to be a "wart."  For
 
  56 example, the following code is rather ugly in that the "wx" prefix on
 
  57 the wxFrame class name is no longer useful when you're using the wx
 
  60     from wxPython import wx
 
  62     class Frame(wx.wxFrame)
 
  64 The new wx package allows you to write code like this, instead::
 
  70 The third reason is that the wxWindows project has considered doing
 
  71 the same thing (implement a new wx namespace and drop the "wx" prefix)
 
  72 and we want wxPython to lead the way.
 
  75 What does the new wx package do?
 
  76 ================================
 
  78 As mentioned in the Introduction, wxPython 2.4.1 introduced a way of
 
  79 getting to this new syntax as quickly as possible.  It would import
 
  80 the old names (like "wxFrame") from the old package and then create new
 
  81 names in the wx package  without the wx prefix, (like "Frame".)
 
  82 Starting with wxPython 2.5 the renaming is moved up to the wxPython
 
  83 build step, so the real classes and etc. are actually named with the
 
  84 new name (like "Frame") and are located in the new wx package.
 
  86 For compatibility the old wxPython package still exists, but now it is
 
  87 populated with modules that simply import the new names and then
 
  88 "reverse-renames" them to the old names.  It probably sounds a bit
 
  89 complicated, but it is mostly automated and so it  doesn't cause
 
  90 problems in most cases.
 
  93 Will any of this effect my existing code?
 
  94 =========================================
 
  96 No.  Your existing code will continue to work and be supported for
 
  97 some time.  It will be up to you to decide when to switch to the new
 
  98 syntax.  But all new documentation and code examples will use the new
 
  99 syntax.  So don't wait too long.  You wouldn't want anyone calling you
 
 100 old-fashioned, would you?
 
 102 When you import from wxPython.wx and use a class with the old name,
 
 103 such as wxButton, you are actually using the wx.Button class.  I
 
 104 expect that the vast majority of the existing code should work fine
 
 105 using this scheme.  The only things that may cause problems is if your
 
 106 old code is depending on some of the implemtation details, or if you
 
 107 are using other things that have changed in the API.  See the
 
 108 `Migration Guide`_ for more details.
 
 110 .. _Migration Guide: MigrationGuide.html
 
 113 What about all the other modules, like grid, html, and stc?
 
 114 ===========================================================
 
 116 There's more to the old wxPython than just the wxPython.wx module.
 
 117 And we've got those extra modules covered as well.  Each of those
 
 118 modules (as well as the lib subpackage) has been moved to the new wx
 
 119 package and reverse-renamers have been placed in the wxPython package
 
 123 How do I use this new wx package?
 
 124 =================================
 
 126 The wx package is automatically created when you install wxPython
 
 127 version 2.4.1 or higher.  So all you have to do is::
 
 132 What are the issues with converting old code to use the new wx package?
 
 133 ======================================================================= 
 
 135 Obviously, you need to change your import statements from::
 
 137     from wxPython import wx
 
 141     from wxPython.wx import *
 
 147 Then you need to refer to wx attributes without a "wx" prefix, such
 
 150     class MyFrame(wx.Frame):
 
 152 In most cases, existing code can be modified with a simple search and
 
 157 Where can I find example programs using the new wx syntax?
 
 158 ==========================================================
 
 160 The wxPython demo application and most of the sample apps have been
 
 161 converted to use the new ``import wx`` style of programming with
 
 162 wxPython, so there are lots of examples to look at and to play with.
 
 163 Here is one of them, it is the ``simple`` sample.
 
 166 .. include:: ../samples/simple/simple.py