Moved to docs directory; some files renamed.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@20358 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1,208 +0,0 @@
|
|||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:date: $Date$
|
|
||||||
:version: $Revision$
|
|
||||||
:copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.first {
|
|
||||||
margin-top: 0 }
|
|
||||||
|
|
||||||
.last {
|
|
||||||
margin-bottom: 0 }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
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.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 }
|
|
||||||
|
|
||||||
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.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 }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 0em 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right }
|
|
||||||
|
|
||||||
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.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
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.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
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.line-block {
|
|
||||||
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.option-argument {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
table {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid thin gray ;
|
|
||||||
padding-left: 0.5ex }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid thin black ;
|
|
||||||
padding-left: 0.5ex }
|
|
||||||
|
|
||||||
td, th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
th.docinfo-name, th.field-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
@@ -1,207 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!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=utf-8" />
|
|
||||||
<meta name="generator" content="Docutils 0.2.8: http://docutils.sourceforge.net/" />
|
|
||||||
<title>Example Programs Using wxPython</title>
|
|
||||||
<meta name="author" content="Patrick K. O'Brien" />
|
|
||||||
<meta name="date" content="2003-03-21" />
|
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="document" id="example-programs-using-wxpython">
|
|
||||||
<h1 class="title">Example Programs Using wxPython</h1>
|
|
||||||
<h2 class="subtitle" id="a-survival-guide-for-the-post-wx-prefixed-world">A survival guide for the post-wx-prefixed world.</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">Contact:</th>
|
|
||||||
<td><a class="first last reference" href="mailto:pobrien@orbtech.com">pobrien@orbtech.com</a></td></tr>
|
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
|
||||||
<td>2003-03-21</td></tr>
|
|
||||||
<tr><th class="docinfo-name">Revision:</th>
|
|
||||||
<td>1.1</td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<div class="contents topic" id="contents">
|
|
||||||
<p class="topic-title"><a name="contents">Contents</a></p>
|
|
||||||
<ul class="simple">
|
|
||||||
<li><a class="reference" href="#introduction" id="id1" name="id1">Introduction</a></li>
|
|
||||||
<li><a class="reference" href="#basic" id="id2" name="id2">Basic</a></li>
|
|
||||||
<li><a class="reference" href="#hello" id="id3" name="id3">Hello</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="introduction">
|
|
||||||
<h1><a class="toc-backref" href="#id1" name="introduction">Introduction</a></h1>
|
|
||||||
<p>If something hits you on the head, don't run around screaming that the
|
|
||||||
sky is falling. Instead, take a close look and see if it wasn't a
|
|
||||||
"wx" prefix that hit you. Apparently, they're dropping off wxPython
|
|
||||||
class names like flies dropping dead in the scorching heat of a
|
|
||||||
summer's day.</p>
|
|
||||||
<p>Yes, the world is changing, and even our little wxPython world must
|
|
||||||
change with it. Then again, I'm not fond of pesky summertime flies,
|
|
||||||
and I'm not too upset that the "wx" prefixes are going to bite the
|
|
||||||
dust. I think it's for the best. But, being the kind, considerate
|
|
||||||
person that I am, I decided to write this guide to make the wx
|
|
||||||
namespace transition easier for everyone, even Chicken Little.</p>
|
|
||||||
<div class="sidebar">
|
|
||||||
<p class="sidebar-title">Say what?</p>
|
|
||||||
<p>If you have no idea what I mean by the "wx namespace transition,"
|
|
||||||
consider yourself lucky. You can simply use these examples to
|
|
||||||
learn wxPython in its current state. All you need to know is that
|
|
||||||
previous wxPython code used a slightly different syntax that some
|
|
||||||
folks (including me) considered ugly. So we changed it. And
|
|
||||||
that's when the sky starting falling...</p>
|
|
||||||
</div>
|
|
||||||
<p>Rather than simply <strong>tell</strong> you that everything will be okay, I
|
|
||||||
decided to <strong>show</strong> you that everything will be okay. To do that,
|
|
||||||
I've created a bunch of example programs using the new wx package. I
|
|
||||||
hope you like them.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="basic">
|
|
||||||
<h1><a class="toc-backref" href="#id2" name="basic">Basic</a></h1>
|
|
||||||
<p>It doesn't get much simpler than this. Every wxPython program needs
|
|
||||||
an application and a frame. To encourage good coding habits, I've
|
|
||||||
split them into separate modules. They don't do much, but they're a
|
|
||||||
good starting point.</p>
|
|
||||||
<p>I include a simple App class in the frame module because the PyCrust
|
|
||||||
"wrapper" utility (<tt class="literal"><span class="pre">wrap.py</span></tt>) only works with modules that contain
|
|
||||||
an application class. So including a simple one in each of your frame
|
|
||||||
modules allows you to use the PyCrust runtime wrapper and debug your
|
|
||||||
frames independent of your full application.</p>
|
|
||||||
<p>Here is the module (<tt class="literal"><span class="pre">frame.py</span></tt>) that defines the frame class:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""Basic frame class, with App for testing."""
|
|
||||||
|
|
||||||
__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
|
|
||||||
__cvsid__ = "$Id$"
|
|
||||||
__revision__ = "$Revision$"[11:-2]
|
|
||||||
|
|
||||||
import wx
|
|
||||||
|
|
||||||
class Frame(wx.Frame):
|
|
||||||
"""Frame class."""
|
|
||||||
|
|
||||||
def __init__(self, parent=None, id=-1, title='Title',
|
|
||||||
pos=wx.DefaultPosition, size=(400, 200)):
|
|
||||||
"""Create a Frame instance."""
|
|
||||||
wx.Frame.__init__(self, parent, id, title, pos, size)
|
|
||||||
|
|
||||||
class App(wx.App):
|
|
||||||
"""Application class."""
|
|
||||||
|
|
||||||
def OnInit(self):
|
|
||||||
self.frame = Frame()
|
|
||||||
self.frame.Show()
|
|
||||||
self.SetTopWindow(self.frame)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def main():
|
|
||||||
app = App()
|
|
||||||
app.MainLoop()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<p>And here is the module (<tt class="literal"><span class="pre">app.py</span></tt>) that defines the application class
|
|
||||||
and imports the frame from <tt class="literal"><span class="pre">frame.py</span></tt>:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""Basic application class."""
|
|
||||||
|
|
||||||
__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
|
|
||||||
__cvsid__ = "$Id$"
|
|
||||||
__revision__ = "$Revision$"[11:-2]
|
|
||||||
|
|
||||||
import wx
|
|
||||||
|
|
||||||
from frame import Frame
|
|
||||||
|
|
||||||
class App(wx.App):
|
|
||||||
"""Application class."""
|
|
||||||
|
|
||||||
def OnInit(self):
|
|
||||||
self.frame = Frame()
|
|
||||||
self.frame.Show()
|
|
||||||
self.SetTopWindow(self.frame)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def main():
|
|
||||||
app = App()
|
|
||||||
app.MainLoop()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="hello">
|
|
||||||
<h1><a class="toc-backref" href="#id3" name="hello">Hello</a></h1>
|
|
||||||
<p>This program displays an image file (<tt class="literal"><span class="pre">wxPython.jpg</span></tt>) inside a frame
|
|
||||||
sized to match the graphic.</p>
|
|
||||||
<div class="figure">
|
|
||||||
<p><img alt="screenshots/hello-win98.png" scale="100" src="screenshots/hello-win98.png" /></p>
|
|
||||||
<p class="caption">Running <tt class="literal"><span class="pre">hello.py</span></tt> on Windows.</p>
|
|
||||||
</div>
|
|
||||||
<div class="figure">
|
|
||||||
<p><img alt="screenshots/hello-linux.png" scale="100" src="screenshots/hello-linux.png" /></p>
|
|
||||||
<p class="caption">Running <tt class="literal"><span class="pre">hello.py</span></tt> on Linux.</p>
|
|
||||||
</div>
|
|
||||||
<div class="figure">
|
|
||||||
<p><img alt="screenshots/hello-mac.png" scale="100" src="screenshots/hello-mac.png" /></p>
|
|
||||||
<p class="caption">Running <tt class="literal"><span class="pre">hello.py</span></tt> on Mac OS X.</p>
|
|
||||||
</div>
|
|
||||||
<p>Here is the source code for <tt class="literal"><span class="pre">hello.py</span></tt>:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""Hello, wxPython! program."""
|
|
||||||
|
|
||||||
__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
|
|
||||||
__cvsid__ = "$Id$"
|
|
||||||
__revision__ = "$Revision$"[11:-2]
|
|
||||||
|
|
||||||
import wx
|
|
||||||
|
|
||||||
class Frame(wx.Frame):
|
|
||||||
"""Frame class that displays an image."""
|
|
||||||
|
|
||||||
def __init__(self, image, parent=None, id=-1,
|
|
||||||
pos=wx.DefaultPosition, title='Hello, wxPython!'):
|
|
||||||
"""Create a Frame instance and display image."""
|
|
||||||
temp = image.ConvertToBitmap()
|
|
||||||
size = temp.GetWidth(), temp.GetHeight()
|
|
||||||
wx.Frame.__init__(self, parent, id, title, pos, size)
|
|
||||||
self.bmp = wx.StaticBitmap(parent=self, id=-1, bitmap=temp)
|
|
||||||
|
|
||||||
class App(wx.App):
|
|
||||||
"""Application class."""
|
|
||||||
|
|
||||||
def OnInit(self):
|
|
||||||
wx.InitAllImageHandlers()
|
|
||||||
image = wx.Image('wxPython.jpg', wx.BITMAP_TYPE_JPEG)
|
|
||||||
self.frame = Frame(image)
|
|
||||||
self.frame.Show()
|
|
||||||
self.SetTopWindow(self.frame)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def main():
|
|
||||||
app = App()
|
|
||||||
app.MainLoop()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -1,99 +0,0 @@
|
|||||||
=================================
|
|
||||||
Example Programs Using wxPython
|
|
||||||
=================================
|
|
||||||
|
|
||||||
--------------------------------------------------
|
|
||||||
A survival guide for the post-wx-prefixed world.
|
|
||||||
--------------------------------------------------
|
|
||||||
|
|
||||||
:Author: Patrick K. O'Brien
|
|
||||||
:Contact: pobrien@orbtech.com
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
|
|
||||||
|
|
||||||
Introduction
|
|
||||||
============
|
|
||||||
|
|
||||||
If something hits you on the head, don't run around screaming that the
|
|
||||||
sky is falling. Instead, take a close look and see if it wasn't a
|
|
||||||
"wx" prefix that hit you. Apparently, they're dropping off wxPython
|
|
||||||
class names like flies dropping dead in the scorching heat of a
|
|
||||||
summer's day.
|
|
||||||
|
|
||||||
Yes, the world is changing, and even our little wxPython world must
|
|
||||||
change with it. Then again, I'm not fond of pesky summertime flies,
|
|
||||||
and I'm not too upset that the "wx" prefixes are going to bite the
|
|
||||||
dust. I think it's for the best. But, being the kind, considerate
|
|
||||||
person that I am, I decided to write this guide to make the wx
|
|
||||||
namespace transition easier for everyone, even Chicken Little.
|
|
||||||
|
|
||||||
.. sidebar:: Say what?
|
|
||||||
|
|
||||||
If you have no idea what I mean by the "wx namespace transition,"
|
|
||||||
consider yourself lucky. You can simply use these examples to
|
|
||||||
learn wxPython in its current state. All you need to know is that
|
|
||||||
previous wxPython code used a slightly different syntax that some
|
|
||||||
folks (including me) considered ugly. So we changed it. And
|
|
||||||
that's when the sky starting falling...
|
|
||||||
|
|
||||||
Rather than simply **tell** you that everything will be okay, I
|
|
||||||
decided to **show** you that everything will be okay. To do that,
|
|
||||||
I've created a bunch of example programs using the new wx package. I
|
|
||||||
hope you like them.
|
|
||||||
|
|
||||||
|
|
||||||
Basic
|
|
||||||
=====
|
|
||||||
|
|
||||||
It doesn't get much simpler than this. Every wxPython program needs
|
|
||||||
an application and a frame. To encourage good coding habits, I've
|
|
||||||
split them into separate modules. They don't do much, but they're a
|
|
||||||
good starting point.
|
|
||||||
|
|
||||||
I include a simple App class in the frame module because the PyCrust
|
|
||||||
"wrapper" utility (``wrap.py``) only works with modules that contain
|
|
||||||
an application class. So including a simple one in each of your frame
|
|
||||||
modules allows you to use the PyCrust runtime wrapper and debug your
|
|
||||||
frames independent of your full application.
|
|
||||||
|
|
||||||
Here is the module (``frame.py``) that defines the frame class:
|
|
||||||
|
|
||||||
.. include:: basic/frame.py
|
|
||||||
:literal:
|
|
||||||
|
|
||||||
And here is the module (``app.py``) that defines the application class
|
|
||||||
and imports the frame from ``frame.py``:
|
|
||||||
|
|
||||||
.. include:: basic/app.py
|
|
||||||
:literal:
|
|
||||||
|
|
||||||
|
|
||||||
Hello
|
|
||||||
=====
|
|
||||||
|
|
||||||
This program displays an image file (``wxPython.jpg``) inside a frame
|
|
||||||
sized to match the graphic.
|
|
||||||
|
|
||||||
.. figure:: screenshots/hello-win98.png
|
|
||||||
:scale: 100
|
|
||||||
|
|
||||||
Running ``hello.py`` on Windows.
|
|
||||||
|
|
||||||
.. figure:: screenshots/hello-linux.png
|
|
||||||
:scale: 100
|
|
||||||
|
|
||||||
Running ``hello.py`` on Linux.
|
|
||||||
|
|
||||||
.. figure:: screenshots/hello-mac.png
|
|
||||||
:scale: 100
|
|
||||||
|
|
||||||
Running ``hello.py`` on Mac OS X.
|
|
||||||
|
|
||||||
Here is the source code for ``hello.py``:
|
|
||||||
|
|
||||||
.. include:: hello/hello.py
|
|
||||||
:literal:
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 61 KiB |
Binary file not shown.
Before Width: | Height: | Size: 60 KiB |
Binary file not shown.
Before Width: | Height: | Size: 48 KiB |
@@ -1,208 +0,0 @@
|
|||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:date: $Date$
|
|
||||||
:version: $Revision$
|
|
||||||
:copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.first {
|
|
||||||
margin-top: 0 }
|
|
||||||
|
|
||||||
.last {
|
|
||||||
margin-bottom: 0 }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
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.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 }
|
|
||||||
|
|
||||||
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.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 }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 0em 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right }
|
|
||||||
|
|
||||||
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.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
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.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
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.line-block {
|
|
||||||
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.option-argument {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
table {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid thin gray ;
|
|
||||||
padding-left: 0.5ex }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid thin black ;
|
|
||||||
padding-left: 0.5ex }
|
|
||||||
|
|
||||||
td, th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
th.docinfo-name, th.field-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
@@ -1,285 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!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=utf-8" />
|
|
||||||
<meta name="generator" content="Docutils 0.2.8: http://docutils.sourceforge.net/" />
|
|
||||||
<title>The wxPython wx Package</title>
|
|
||||||
<meta name="author" content="Patrick K. O'Brien" />
|
|
||||||
<meta name="date" content="2003-03-21" />
|
|
||||||
<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="how-to-survive-the-new-wx-namespace-changes">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">Contact:</th>
|
|
||||||
<td><a class="first last reference" href="mailto:pobrien@orbtech.com">pobrien@orbtech.com</a></td></tr>
|
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
|
||||||
<td>2003-03-21</td></tr>
|
|
||||||
<tr><th class="docinfo-name">Revision:</th>
|
|
||||||
<td>1.1</td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<div class="contents topic" id="contents">
|
|
||||||
<p class="topic-title"><a name="contents">Contents</a></p>
|
|
||||||
<ul class="simple">
|
|
||||||
<li><a class="reference" href="#introduction" id="id1" name="id1">Introduction</a></li>
|
|
||||||
<li><a class="reference" href="#why-change-anything" id="id2" name="id2">Why change anything?</a></li>
|
|
||||||
<li><a class="reference" href="#what-does-the-new-wx-package-do" id="id3" name="id3">What does the new wx package do?</a></li>
|
|
||||||
<li><a class="reference" href="#will-any-of-this-effect-my-existing-code" id="id4" name="id4">Will any of this effect my existing code?</a></li>
|
|
||||||
<li><a class="reference" href="#how-does-the-new-wx-package-work" id="id5" name="id5">How does the new wx package work?</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-it" id="id7" name="id7">How do I use it?</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="introduction">
|
|
||||||
<h1><a class="toc-backref" href="#id1" name="introduction">Introduction</a></h1>
|
|
||||||
<p>Big things sometimes come in small packages. This is certainly true
|
|
||||||
of the new wx package, which is being introduced as a transition to
|
|
||||||
allow the "wx" prefix to be dropped from the names of all wxPython
|
|
||||||
classes, functions, and constants.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="why-change-anything">
|
|
||||||
<h1><a class="toc-backref" href="#id2" 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="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 intends to do 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" id="what-does-the-new-wx-package-do">
|
|
||||||
<h1><a class="toc-backref" href="#id3" name="what-does-the-new-wx-package-do">What does the new wx package do?</a></h1>
|
|
||||||
<p>As a way of getting to this new syntax as quickly as possible, the
|
|
||||||
code in this new wx package was created. What it does is alter the
|
|
||||||
existing wx namespace dynamically. By making the changes on-the-fly
|
|
||||||
at runtime, we can try out the new syntax before any permanent changes
|
|
||||||
are made to the underlying class library. The downside of making
|
|
||||||
these changes at runtime is that there is a slight delay when you
|
|
||||||
<tt class="literal"><span class="pre">import</span> <span class="pre">wx</span></tt>; the upside is that you can start using the new syntax
|
|
||||||
now.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="will-any-of-this-effect-my-existing-code">
|
|
||||||
<h1><a class="toc-backref" href="#id4" 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>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="how-does-the-new-wx-package-work">
|
|
||||||
<h1><a class="toc-backref" href="#id5" name="how-does-the-new-wx-package-work">How does the new wx package work?</a></h1>
|
|
||||||
<p>It's pretty simple, and pretty clever. The wx directory contains an
|
|
||||||
<tt class="literal"><span class="pre">__init__.py</span></tt> file, making it a Python package. (In contrast, the
|
|
||||||
old wxPython.wx module is a module, not a package.) When you <tt class="literal"><span class="pre">import</span>
|
|
||||||
<span class="pre">wx</span></tt> the code in the <tt class="literal"><span class="pre">__init__.py</span></tt> file is executed, and that's
|
|
||||||
where all the magic takes place. Let's take a look at the code inside
|
|
||||||
the <tt class="literal"><span class="pre">__init__.py</span></tt> file:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
"""wx package
|
|
||||||
|
|
||||||
Provides a way to drop the wx prefix from wxPython objects."""
|
|
||||||
|
|
||||||
__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
|
|
||||||
__cvsid__ = "$Id$"
|
|
||||||
__revision__ = "$Revision$"[11:-2]
|
|
||||||
|
|
||||||
from wxPython import wx
|
|
||||||
|
|
||||||
import types
|
|
||||||
|
|
||||||
d_new = globals()
|
|
||||||
d_old = wx.__dict__
|
|
||||||
|
|
||||||
for old, obj in d_old.iteritems():
|
|
||||||
if type(obj) is types.ModuleType or old.startswith('_'):
|
|
||||||
# Skip modules and private names.
|
|
||||||
continue
|
|
||||||
new = old
|
|
||||||
if old.startswith('EVT_'):
|
|
||||||
# Leave name unmodified; add to the new wx namespace.
|
|
||||||
d_new[new] = obj
|
|
||||||
elif old.startswith('wxEVT_'):
|
|
||||||
# Leave name unmodified; add to the new wx namespace.
|
|
||||||
d_new[new] = obj
|
|
||||||
else:
|
|
||||||
if old.startswith('wx'):
|
|
||||||
# Remove the 'wx' prefix.
|
|
||||||
new = old[2:]
|
|
||||||
# Add to the new wx package namespace.
|
|
||||||
d_new[new] = obj
|
|
||||||
|
|
||||||
del d_new
|
|
||||||
del d_old
|
|
||||||
del new
|
|
||||||
del obj
|
|
||||||
del old
|
|
||||||
del types
|
|
||||||
|
|
||||||
del wx
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<p>Namespaces in Python are implemented as dictionaries. The dictionary
|
|
||||||
used to create the wx package's namespace is accessible using the
|
|
||||||
<tt class="literal"><span class="pre">globals()</span></tt> function. The dictionary used to create the old
|
|
||||||
wxPython.wx module's namespace is <tt class="literal"><span class="pre">wx.__dict__</span></tt>. Once we have these
|
|
||||||
two dictionaries, it's a simple matter of iterating through one,
|
|
||||||
changing the names, adding the renamed object to the other dictionary,
|
|
||||||
and cleaning up a few local variables and imported modules. Voila!</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="what-about-all-the-other-modules-like-grid-html-and-stc">
|
|
||||||
<h1><a class="toc-backref" href="#id6" 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 wxPython than just the wx namespace. And we've got
|
|
||||||
those extra modules covered as well. For each of those modules (as
|
|
||||||
well as the lib package) we've got matching modules in the new wx
|
|
||||||
package. Let's take a look at a few of them.</p>
|
|
||||||
<p>Here is <tt class="literal"><span class="pre">html.py</span></tt>:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
"""Provides a way to drop the wx prefix from wxPython objects."""
|
|
||||||
|
|
||||||
__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
|
|
||||||
__cvsid__ = "$Id$"
|
|
||||||
__revision__ = "$Revision$"[11:-2]
|
|
||||||
|
|
||||||
import wx
|
|
||||||
from wx import prefix
|
|
||||||
|
|
||||||
from wxPython import html
|
|
||||||
prefix.rename(d_new=globals(), d_old=html.__dict__)
|
|
||||||
del html
|
|
||||||
|
|
||||||
del prefix
|
|
||||||
del wx
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<p>And here is <tt class="literal"><span class="pre">lib/dialogs.py</span></tt>:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
"""Provides a way to drop the wx prefix from wxPython objects."""
|
|
||||||
|
|
||||||
__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
|
|
||||||
__cvsid__ = "$Id$"
|
|
||||||
__revision__ = "$Revision$"[11:-2]
|
|
||||||
|
|
||||||
import wx
|
|
||||||
from wx import prefix
|
|
||||||
|
|
||||||
from wxPython.lib import dialogs
|
|
||||||
prefix.rename(d_new=globals(), d_old=dialogs.__dict__)
|
|
||||||
del dialogs
|
|
||||||
|
|
||||||
del prefix
|
|
||||||
del wx
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<p>As you can see, they both rely on the <tt class="literal"><span class="pre">prefix.rename()</span></tt> function
|
|
||||||
defined in <tt class="literal"><span class="pre">prefix.py</span></tt>:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
"""Renaming utility.
|
|
||||||
|
|
||||||
Provides a way to drop the wx prefix from wxPython objects."""
|
|
||||||
|
|
||||||
__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
|
|
||||||
__cvsid__ = "$Id$"
|
|
||||||
__revision__ = "$Revision$"[11:-2]
|
|
||||||
|
|
||||||
import types
|
|
||||||
|
|
||||||
def rename(d_new, d_old):
|
|
||||||
for old, obj in d_old.iteritems():
|
|
||||||
if type(obj) is types.ModuleType or old.startswith('_'):
|
|
||||||
# Skip modules and private names.
|
|
||||||
continue
|
|
||||||
## mod = d_old['__name__']
|
|
||||||
## if hasattr(obj, '__module__') and not obj.__module__.startswith(mod):
|
|
||||||
## # Skip objects imported from other modules, except those
|
|
||||||
## # related to the current module, such as stc_.
|
|
||||||
## continue
|
|
||||||
new = old
|
|
||||||
if old.startswith('EVT_') or old.startswith('wxEVT_'):
|
|
||||||
# Leave these names unmodified.
|
|
||||||
pass
|
|
||||||
elif old.startswith('wx'):
|
|
||||||
new = old[2:]
|
|
||||||
if new:
|
|
||||||
d_new[new] = d_old[old]
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<p>Again, the technique is very similar to the one used by the wx
|
|
||||||
package.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="how-do-i-use-it">
|
|
||||||
<h1><a class="toc-backref" href="#id7" name="how-do-i-use-it">How do I use it?</a></h1>
|
|
||||||
<p>The wx package is created when you install wxPython. So you can start
|
|
||||||
using it now. Examples are included in the wx/examples directory,
|
|
||||||
which includes an examples.txt documentation file. Here is the source
|
|
||||||
code for <tt class="literal"><span class="pre">hello.py</span></tt>, a simple program that displays a wxPython
|
|
||||||
graphic inside a frame:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
"""Hello, wxPython! program."""
|
|
||||||
|
|
||||||
__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
|
|
||||||
__cvsid__ = "$Id$"
|
|
||||||
__revision__ = "$Revision$"[11:-2]
|
|
||||||
|
|
||||||
import wx
|
|
||||||
|
|
||||||
class Frame(wx.Frame):
|
|
||||||
"""Frame class that displays an image."""
|
|
||||||
|
|
||||||
def __init__(self, image, parent=None, id=-1,
|
|
||||||
pos=wx.DefaultPosition, title='Hello, wxPython!'):
|
|
||||||
"""Create a Frame instance and display image."""
|
|
||||||
temp = image.ConvertToBitmap()
|
|
||||||
size = temp.GetWidth(), temp.GetHeight()
|
|
||||||
wx.Frame.__init__(self, parent, id, title, pos, size)
|
|
||||||
self.bmp = wx.StaticBitmap(parent=self, id=-1, bitmap=temp)
|
|
||||||
|
|
||||||
class App(wx.App):
|
|
||||||
"""Application class."""
|
|
||||||
|
|
||||||
def OnInit(self):
|
|
||||||
wx.InitAllImageHandlers()
|
|
||||||
image = wx.Image('wxPython.jpg', wx.BITMAP_TYPE_JPEG)
|
|
||||||
self.frame = Frame(image)
|
|
||||||
self.frame.Show()
|
|
||||||
self.SetTopWindow(self.frame)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def main():
|
|
||||||
app = App()
|
|
||||||
app.MainLoop()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
<p>Good luck. I hope you like the new wx package as much as I do.</p>
|
|
||||||
<p>Pat</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -1,140 +0,0 @@
|
|||||||
=========================
|
|
||||||
The wxPython wx Package
|
|
||||||
=========================
|
|
||||||
|
|
||||||
----------------------------------------------
|
|
||||||
How to survive the new wx namespace changes.
|
|
||||||
----------------------------------------------
|
|
||||||
|
|
||||||
:Author: Patrick K. O'Brien
|
|
||||||
:Contact: pobrien@orbtech.com
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
|
|
||||||
|
|
||||||
Introduction
|
|
||||||
============
|
|
||||||
|
|
||||||
Big things sometimes come in small packages. This is certainly true
|
|
||||||
of the new wx package, which is being introduced as a transition to
|
|
||||||
allow the "wx" prefix to be dropped from the names of all wxPython
|
|
||||||
classes, functions, and constants.
|
|
||||||
|
|
||||||
|
|
||||||
Why change anything?
|
|
||||||
====================
|
|
||||||
|
|
||||||
This change is being made for a couple of reasons. The first reason
|
|
||||||
is to discourage the use of ``import *``, which is a dangerous
|
|
||||||
technique that can create name conflicts and bloated namespaces.
|
|
||||||
|
|
||||||
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::
|
|
||||||
|
|
||||||
from wxPython import wx
|
|
||||||
|
|
||||||
class Frame(wx.wxFrame)
|
|
||||||
|
|
||||||
The new wx package allows you to write code like this, instead::
|
|
||||||
|
|
||||||
import wx
|
|
||||||
|
|
||||||
class Frame(wx.Frame)
|
|
||||||
|
|
||||||
The third reason is that the wxWindows project intends to do the same
|
|
||||||
thing (implement a new wx namespace and drop the "wx" prefix) and we
|
|
||||||
want wxPython to lead the way.
|
|
||||||
|
|
||||||
|
|
||||||
What does the new wx package do?
|
|
||||||
================================
|
|
||||||
|
|
||||||
As a way of getting to this new syntax as quickly as possible, the
|
|
||||||
code in this new wx package was created. What it does is alter the
|
|
||||||
existing wx namespace dynamically. By making the changes on-the-fly
|
|
||||||
at runtime, we can try out the new syntax before any permanent changes
|
|
||||||
are made to the underlying class library. The downside of making
|
|
||||||
these changes at runtime is that there is a slight delay when you
|
|
||||||
``import wx``; the upside is that you can start using the new syntax
|
|
||||||
now.
|
|
||||||
|
|
||||||
|
|
||||||
Will any of this effect my existing code?
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
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?
|
|
||||||
|
|
||||||
|
|
||||||
How does the new wx package work?
|
|
||||||
=================================
|
|
||||||
|
|
||||||
It's pretty simple, and pretty clever. The wx directory contains an
|
|
||||||
``__init__.py`` file, making it a Python package. (In contrast, the
|
|
||||||
old wxPython.wx module is a module, not a package.) When you ``import
|
|
||||||
wx`` the code in the ``__init__.py`` file is executed, and that's
|
|
||||||
where all the magic takes place. Let's take a look at the code inside
|
|
||||||
the ``__init__.py`` file:
|
|
||||||
|
|
||||||
.. include:: __init__.py
|
|
||||||
:literal:
|
|
||||||
|
|
||||||
Namespaces in Python are implemented as dictionaries. The dictionary
|
|
||||||
used to create the wx package's namespace is accessible using the
|
|
||||||
``globals()`` function. The dictionary used to create the old
|
|
||||||
wxPython.wx module's namespace is ``wx.__dict__``. Once we have these
|
|
||||||
two dictionaries, it's a simple matter of iterating through one,
|
|
||||||
changing the names, adding the renamed object to the other dictionary,
|
|
||||||
and cleaning up a few local variables and imported modules. Voila!
|
|
||||||
|
|
||||||
|
|
||||||
What about all the other modules, like grid, html, and stc?
|
|
||||||
===========================================================
|
|
||||||
|
|
||||||
There's more to wxPython than just the wx namespace. And we've got
|
|
||||||
those extra modules covered as well. For each of those modules (as
|
|
||||||
well as the lib package) we've got matching modules in the new wx
|
|
||||||
package. Let's take a look at a few of them.
|
|
||||||
|
|
||||||
Here is ``html.py``:
|
|
||||||
|
|
||||||
.. include:: html.py
|
|
||||||
:literal:
|
|
||||||
|
|
||||||
And here is ``lib/dialogs.py``:
|
|
||||||
|
|
||||||
.. include:: lib/dialogs.py
|
|
||||||
:literal:
|
|
||||||
|
|
||||||
As you can see, they both rely on the ``prefix.rename()`` function
|
|
||||||
defined in ``prefix.py``:
|
|
||||||
|
|
||||||
.. include:: prefix.py
|
|
||||||
:literal:
|
|
||||||
|
|
||||||
Again, the technique is very similar to the one used by the wx
|
|
||||||
package.
|
|
||||||
|
|
||||||
|
|
||||||
How do I use it?
|
|
||||||
================
|
|
||||||
|
|
||||||
The wx package is created when you install wxPython. So you can start
|
|
||||||
using it now. Examples are included in the wx/examples directory,
|
|
||||||
which includes an examples.txt documentation file. Here is the source
|
|
||||||
code for ``hello.py``, a simple program that displays a wxPython
|
|
||||||
graphic inside a frame:
|
|
||||||
|
|
||||||
.. include:: examples/hello/hello.py
|
|
||||||
:literal:
|
|
||||||
|
|
||||||
Good luck. I hope you like the new wx package as much as I do.
|
|
||||||
|
|
||||||
Pat
|
|
@@ -1,76 +0,0 @@
|
|||||||
===============
|
|
||||||
The Py Manual
|
|
||||||
===============
|
|
||||||
|
|
||||||
-------------------------
|
|
||||||
Py - Served Fresh Daily
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
:Author: Patrick K. O'Brien
|
|
||||||
:Contact: pobrien@orbtech.com
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
|
|
||||||
.. contents::
|
|
||||||
|
|
||||||
|
|
||||||
Introduction
|
|
||||||
============
|
|
||||||
|
|
||||||
This document will show you how to make use of the Py programs and
|
|
||||||
library of modules.
|
|
||||||
|
|
||||||
|
|
||||||
What is Py?
|
|
||||||
===========
|
|
||||||
|
|
||||||
Py is really several things. Py is a set of standalone programs as
|
|
||||||
well as a library of modules that you can use in your own programs.
|
|
||||||
|
|
||||||
First, Py contains standalone programs that provide code editors and
|
|
||||||
graphical, Python shell interfaces. Second, Py contains a collections
|
|
||||||
of modules that you can use in your own wxPython applications to
|
|
||||||
provide similar services, either for your own use during development,
|
|
||||||
or as an interface for users of your program. Third, Py containss a
|
|
||||||
wrapper utility, providing you with runtime introspection capabilities
|
|
||||||
for your wxPython programs without having to include PyCrust or
|
|
||||||
PyShell in your program, or alter one line of your code.
|
|
||||||
|
|
||||||
|
|
||||||
Py standalone programs
|
|
||||||
======================
|
|
||||||
|
|
||||||
There are several standalone applications in the Py package:
|
|
||||||
|
|
||||||
* PyAlaCarte
|
|
||||||
* PyAlaMode
|
|
||||||
* PyCrust
|
|
||||||
* PyFilling
|
|
||||||
* PyShell
|
|
||||||
* PyWrap
|
|
||||||
|
|
||||||
|
|
||||||
Py modules
|
|
||||||
==========
|
|
||||||
|
|
||||||
Py was designed to be modular. That means graphical code is kept
|
|
||||||
separate from non-graphical code, and many of the Py modules can be
|
|
||||||
used by other programs. Likewise, other programs can supply some of
|
|
||||||
the modules needed by Py. For example, you could supply a customized
|
|
||||||
interpreter module and plug it in to the PyCrust standalone
|
|
||||||
application. As long as it supports the minimum functionality
|
|
||||||
required, PyCrust will work just as well with your interpreter as with
|
|
||||||
its default interpreter.
|
|
||||||
|
|
||||||
|
|
||||||
Py runtime wrapper
|
|
||||||
==================
|
|
||||||
|
|
||||||
The Py wrapper utility (``PyWrap.py``) lets you run an existing
|
|
||||||
wxPython program with a PyCrust frame at the same time. Inside the
|
|
||||||
PyCrust shell, the local variable ``app`` is assigned to your
|
|
||||||
application instance. In this way you can introspect your entire
|
|
||||||
application within the PyCrust shell and the PyFilling namespace
|
|
||||||
viewer. And through the use of the Py decorator classes, PyCrust can
|
|
||||||
display wxPython function and method signatures as well as docstrings
|
|
||||||
for the entire wxPython library.
|
|
@@ -1,208 +0,0 @@
|
|||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:date: $Date$
|
|
||||||
:version: $Revision$
|
|
||||||
:copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.first {
|
|
||||||
margin-top: 0 }
|
|
||||||
|
|
||||||
.last {
|
|
||||||
margin-bottom: 0 }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
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.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 }
|
|
||||||
|
|
||||||
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.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 }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 0em 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right }
|
|
||||||
|
|
||||||
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.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
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.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
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.line-block {
|
|
||||||
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.option-argument {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
table {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid thin gray ;
|
|
||||||
padding-left: 0.5ex }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid thin black ;
|
|
||||||
padding-left: 0.5ex }
|
|
||||||
|
|
||||||
td, th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
th.docinfo-name, th.field-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
@@ -1,208 +0,0 @@
|
|||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:date: $Date$
|
|
||||||
:version: $Revision$
|
|
||||||
:copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.first {
|
|
||||||
margin-top: 0 }
|
|
||||||
|
|
||||||
.last {
|
|
||||||
margin-bottom: 0 }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
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.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 }
|
|
||||||
|
|
||||||
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.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 }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 0em 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right }
|
|
||||||
|
|
||||||
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.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
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.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
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.line-block {
|
|
||||||
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.option-argument {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
table {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid thin gray ;
|
|
||||||
padding-left: 0.5ex }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid thin black ;
|
|
||||||
padding-left: 0.5ex }
|
|
||||||
|
|
||||||
td, th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
th.docinfo-name, th.field-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user