974a50f1bb
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42102 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
545 lines
18 KiB
HTML
545 lines
18 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: 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" />
|
|
<style type="text/css">
|
|
|
|
/*
|
|
:Author: David Goodger
|
|
:Contact: goodger@users.sourceforge.net
|
|
:Date: $Date$
|
|
:Revision: $Revision$
|
|
:Copyright: This stylesheet has been placed in the public domain.
|
|
|
|
Default cascading style sheet for the HTML output of Docutils.
|
|
|
|
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
customize this style sheet.
|
|
*/
|
|
|
|
/* used to remove borders from tables and images */
|
|
.borderless, table.borderless td, table.borderless th {
|
|
border: 0 }
|
|
|
|
table.borderless td, table.borderless th {
|
|
/* Override padding for "table.docutils td" with "! important".
|
|
The right padding separates the table cells. */
|
|
padding: 0 0.5em 0 0 ! important }
|
|
|
|
.first {
|
|
/* Override more specific margin styles with "! important". */
|
|
margin-top: 0 ! important }
|
|
|
|
.last, .with-subtitle {
|
|
margin-bottom: 0 ! important }
|
|
|
|
.hidden {
|
|
display: none }
|
|
|
|
a.toc-backref {
|
|
text-decoration: none ;
|
|
color: black }
|
|
|
|
blockquote.epigraph {
|
|
margin: 2em 5em ; }
|
|
|
|
dl.docutils dd {
|
|
margin-bottom: 0.5em }
|
|
|
|
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
dl.docutils dt {
|
|
font-weight: bold }
|
|
*/
|
|
|
|
div.abstract {
|
|
margin: 2em 5em }
|
|
|
|
div.abstract p.topic-title {
|
|
font-weight: bold ;
|
|
text-align: center }
|
|
|
|
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
div.hint, div.important, div.note, div.tip, div.warning {
|
|
margin: 2em ;
|
|
border: medium outset ;
|
|
padding: 1em }
|
|
|
|
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
div.important p.admonition-title, div.note p.admonition-title,
|
|
div.tip p.admonition-title {
|
|
font-weight: bold ;
|
|
font-family: sans-serif }
|
|
|
|
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
div.danger p.admonition-title, div.error p.admonition-title,
|
|
div.warning p.admonition-title {
|
|
color: red ;
|
|
font-weight: bold ;
|
|
font-family: sans-serif }
|
|
|
|
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
compound paragraphs.
|
|
div.compound .compound-first, div.compound .compound-middle {
|
|
margin-bottom: 0.5em }
|
|
|
|
div.compound .compound-last, div.compound .compound-middle {
|
|
margin-top: 0.5em }
|
|
*/
|
|
|
|
div.dedication {
|
|
margin: 2em 5em ;
|
|
text-align: center ;
|
|
font-style: italic }
|
|
|
|
div.dedication p.topic-title {
|
|
font-weight: bold ;
|
|
font-style: normal }
|
|
|
|
div.figure {
|
|
margin-left: 2em ;
|
|
margin-right: 2em }
|
|
|
|
div.footer, div.header {
|
|
clear: both;
|
|
font-size: smaller }
|
|
|
|
div.line-block {
|
|
display: block ;
|
|
margin-top: 1em ;
|
|
margin-bottom: 1em }
|
|
|
|
div.line-block div.line-block {
|
|
margin-top: 0 ;
|
|
margin-bottom: 0 ;
|
|
margin-left: 1.5em }
|
|
|
|
div.sidebar {
|
|
margin-left: 1em ;
|
|
border: medium outset ;
|
|
padding: 1em ;
|
|
background-color: #ffffee ;
|
|
width: 40% ;
|
|
float: right ;
|
|
clear: right }
|
|
|
|
div.sidebar p.rubric {
|
|
font-family: sans-serif ;
|
|
font-size: medium }
|
|
|
|
div.system-messages {
|
|
margin: 5em }
|
|
|
|
div.system-messages h1 {
|
|
color: red }
|
|
|
|
div.system-message {
|
|
border: medium outset ;
|
|
padding: 1em }
|
|
|
|
div.system-message p.system-message-title {
|
|
color: red ;
|
|
font-weight: bold }
|
|
|
|
div.topic {
|
|
margin: 2em }
|
|
|
|
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
margin-top: 0.4em }
|
|
|
|
h1.title {
|
|
text-align: center }
|
|
|
|
h2.subtitle {
|
|
text-align: center }
|
|
|
|
hr.docutils {
|
|
width: 75% }
|
|
|
|
img.align-left {
|
|
clear: left }
|
|
|
|
img.align-right {
|
|
clear: right }
|
|
|
|
ol.simple, ul.simple {
|
|
margin-bottom: 1em }
|
|
|
|
ol.arabic {
|
|
list-style: decimal }
|
|
|
|
ol.loweralpha {
|
|
list-style: lower-alpha }
|
|
|
|
ol.upperalpha {
|
|
list-style: upper-alpha }
|
|
|
|
ol.lowerroman {
|
|
list-style: lower-roman }
|
|
|
|
ol.upperroman {
|
|
list-style: upper-roman }
|
|
|
|
p.attribution {
|
|
text-align: right ;
|
|
margin-left: 50% }
|
|
|
|
p.caption {
|
|
font-style: italic }
|
|
|
|
p.credits {
|
|
font-style: italic ;
|
|
font-size: smaller }
|
|
|
|
p.label {
|
|
white-space: nowrap }
|
|
|
|
p.rubric {
|
|
font-weight: bold ;
|
|
font-size: larger ;
|
|
color: maroon ;
|
|
text-align: center }
|
|
|
|
p.sidebar-title {
|
|
font-family: sans-serif ;
|
|
font-weight: bold ;
|
|
font-size: larger }
|
|
|
|
p.sidebar-subtitle {
|
|
font-family: sans-serif ;
|
|
font-weight: bold }
|
|
|
|
p.topic-title {
|
|
font-weight: bold }
|
|
|
|
pre.address {
|
|
margin-bottom: 0 ;
|
|
margin-top: 0 ;
|
|
font-family: serif ;
|
|
font-size: 100% }
|
|
|
|
pre.literal-block, pre.doctest-block {
|
|
margin-left: 2em ;
|
|
margin-right: 2em ;
|
|
background-color: #eeeeee }
|
|
|
|
span.classifier {
|
|
font-family: sans-serif ;
|
|
font-style: oblique }
|
|
|
|
span.classifier-delimiter {
|
|
font-family: sans-serif ;
|
|
font-weight: bold }
|
|
|
|
span.interpreted {
|
|
font-family: sans-serif }
|
|
|
|
span.option {
|
|
white-space: nowrap }
|
|
|
|
span.pre {
|
|
white-space: pre }
|
|
|
|
span.problematic {
|
|
color: red }
|
|
|
|
span.section-subtitle {
|
|
/* font-size relative to parent (h1..h6 element) */
|
|
font-size: 80% }
|
|
|
|
table.citation {
|
|
border-left: solid 1px gray;
|
|
margin-left: 1px }
|
|
|
|
table.docinfo {
|
|
margin: 2em 4em }
|
|
|
|
table.docutils {
|
|
margin-top: 0.5em ;
|
|
margin-bottom: 0.5em }
|
|
|
|
table.footnote {
|
|
border-left: solid 1px black;
|
|
margin-left: 1px }
|
|
|
|
table.docutils td, table.docutils th,
|
|
table.docinfo td, table.docinfo th {
|
|
padding-left: 0.5em ;
|
|
padding-right: 0.5em ;
|
|
vertical-align: top }
|
|
|
|
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
font-weight: bold ;
|
|
text-align: left ;
|
|
white-space: nowrap ;
|
|
padding-left: 0 }
|
|
|
|
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
font-size: 100% }
|
|
|
|
tt.docutils {
|
|
background-color: #eeeeee }
|
|
|
|
ul.auto-toc {
|
|
list-style-type: none }
|
|
|
|
</style>
|
|
</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>
|