From 625a9dc6664ee781cf4c1c2ec2c61d75665a7412 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Fri, 26 Mar 2004 21:25:58 +0000 Subject: [PATCH] Removed some old, outdated, unfinished, or unstarted docs and the samples that go with them. These can be added back later if somebody wants to work on them again. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26378 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/demo/Main.py | 1 - wxPython/demo/NewNamespace.py | 47 --- wxPython/demo/data/wxPackage.html | 290 ------------------ wxPython/distrib/DIRLIST | 3 - wxPython/distrib/make_installer.py | 11 +- wxPython/docs/wxPythonDocs.html | 77 ----- wxPython/docs/wxPythonDocs.txt | 77 ----- wxPython/docs/wxPythonExamples.html | 226 -------------- wxPython/docs/wxPythonExamples.txt | 118 ------- wxPython/docs/wxPythonTutorial.html | 128 -------- wxPython/docs/wxPythonTutorial.txt | 43 --- .../samples/wx_examples/basic/__init__.py | 1 - wxPython/samples/wx_examples/basic/app.py | 27 -- wxPython/samples/wx_examples/basic/frame.py | 33 -- .../samples/wx_examples/hello/__init__.py | 1 - wxPython/samples/wx_examples/hello/hello.py | 38 --- .../samples/wx_examples/hello/wxPython.jpg | Bin 14557 -> 0 bytes 17 files changed, 2 insertions(+), 1119 deletions(-) delete mode 100644 wxPython/demo/NewNamespace.py delete mode 100644 wxPython/demo/data/wxPackage.html delete mode 100644 wxPython/docs/wxPythonDocs.html delete mode 100644 wxPython/docs/wxPythonDocs.txt delete mode 100644 wxPython/docs/wxPythonExamples.html delete mode 100644 wxPython/docs/wxPythonExamples.txt delete mode 100644 wxPython/docs/wxPythonTutorial.html delete mode 100644 wxPython/docs/wxPythonTutorial.txt delete mode 100644 wxPython/samples/wx_examples/basic/__init__.py delete mode 100755 wxPython/samples/wx_examples/basic/app.py delete mode 100755 wxPython/samples/wx_examples/basic/frame.py delete mode 100644 wxPython/samples/wx_examples/hello/__init__.py delete mode 100755 wxPython/samples/wx_examples/hello/hello.py delete mode 100644 wxPython/samples/wx_examples/hello/wxPython.jpg diff --git a/wxPython/demo/Main.py b/wxPython/demo/Main.py index 733baf9f53..ddce684930 100644 --- a/wxPython/demo/Main.py +++ b/wxPython/demo/Main.py @@ -212,7 +212,6 @@ _treeList = [ 'FileHistory', 'FontEnumerator', 'Joystick', - 'NewNamespace', 'OGL', 'PrintFramework', 'ShapedWindow', diff --git a/wxPython/demo/NewNamespace.py b/wxPython/demo/NewNamespace.py deleted file mode 100644 index 15c4a752bb..0000000000 --- a/wxPython/demo/NewNamespace.py +++ /dev/null @@ -1,47 +0,0 @@ - -import wx # This module uses the new wx namespace -from wx import html -from Main import opj - -#---------------------------------------------------------------------- - -class TestPanel(wx.Panel): - def __init__(self, parent, log): - self.log = log - wx.Panel.__init__(self, parent, -1) - - hwin = html.HtmlWindow(self, -1) - hwin.LoadFile(opj('data/wxPackage.html')) - - sizer = wx.BoxSizer(wx.VERTICAL) - sizer.Add(hwin, 1, wx.EXPAND) - - self.SetSizer(sizer) - - -#---------------------------------------------------------------------- - -def runTest(frame, nb, log): - win = TestPanel(nb, log) - return win - -#---------------------------------------------------------------------- - - - -overview = """ -

Using the New Namespace

- -This sample isn't really a demo, but rather a place to display the -introductory doc for using the new namespace. - - -""" - - - -if __name__ == '__main__': - import sys,os - import run - run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) - diff --git a/wxPython/demo/data/wxPackage.html b/wxPython/demo/data/wxPackage.html deleted file mode 100644 index 5b2fb06588..0000000000 --- a/wxPython/demo/data/wxPackage.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - -The wxPython wx Package - - - - - - -
-

The wxPython wx Package

-

Or, how to survive the new wx namespace changes.

- --- - - - - - - - - - - - -
Author:Patrick K. O'Brien
Contact:pobrien@orbtech.com
Organization:Orbtech
Date:2003-05-08
Revision:1.1.2.4
- -
-

Introduction

-

Big things sometimes come in small packages. This is certainly true -of the new wx package, which is being introduced in wxPython 2.4.1 as -a way to allow the "wx" prefix to be dropped from the names of all -wxPython classes, functions, and constants. This document should -answer all the questions you might have concerning the new wx package. -If not, feel free to contact the author. I hope you like the new wx -package as much as I do.

-
-
-

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:

-
-"""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.items():
-    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
-
-
-

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:

-
-"""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
-
-
-

And here is lib/dialogs.py:

-
-"""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
-
-
-

As you can see, they both rely on the prefix.rename() function -defined in prefix.py:

-
-"""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.items():
-        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]
-
-
-

Again, the technique is very similar to the one used by the wx -package.

-
-
-

How do I use this new wx package?

-

The wx package is automatically created when you install wxPython -version 2.4.1 or higher. So all you have to do is:

-
-import wx
-
-
-
-

What are the issues with converting old code to use the new wx package?

-

Obviously, you need to change your import statements from:

-
-from wxPython import wx
-
-

or:

-
-from wxPython.wx import *
-
-

to:

-
-import wx
-
-

Then you need to refer to wx attributes without a "wx" prefix, such -as:

-
-class MyFrame(wx.Frame):
-
-

In most cases, existing code can be modified with a simple search and -replace.

-

One extra issue you might run into when converting existing code is -that the wx.__version__ attribute is no longer available, since the -new wx namespace doesn't include any private attributes from the old -wxPython.wx namespace. The solution is to use the wx.VERSION_STRING -attribute, which was introduced in wxPython 2.4.1.

-
-
-

Where can I find example programs using the new wx syntax?

-

Example programs are included in the wxPython/samples/wx_examples -directory, and are documented in the wxPythonExamples documentation -file. Also, all the code in the py package uses the new wx syntax. -You can learn more about these in the PyManual.

-
-
- - - - diff --git a/wxPython/distrib/DIRLIST b/wxPython/distrib/DIRLIST index 3ff573dfaa..8f075869ae 100644 --- a/wxPython/distrib/DIRLIST +++ b/wxPython/distrib/DIRLIST @@ -53,9 +53,6 @@ wxPython/samples/pySketch wxPython/samples/pySketch/images wxPython/samples/simple wxPython/samples/StyleEditor -wxPython/samples/wx_examples -wxPython/samples/wx_examples/basic -wxPython/samples/wx_examples/hello wxPython/samples/wxProject wxPython/scripts wxPython/src diff --git a/wxPython/distrib/make_installer.py b/wxPython/distrib/make_installer.py index 3a14fea336..6ebecedcd3 100644 --- a/wxPython/distrib/make_installer.py +++ b/wxPython/distrib/make_installer.py @@ -221,10 +221,6 @@ Source: "samples\StyleEditor\*.txt"; DestDir: "{app}\wx\samples\StyleEdit Source: "samples\StyleEditor\*.py"; DestDir: "{app}\wx\samples\StyleEditor"; Components: samples Source: "samples\StyleEditor\*.cfg"; DestDir: "{app}\wx\samples\StyleEditor"; Components: samples -Source: "samples\wx_examples\basic\*.py"; DestDir: "{app}\wx\samples\wx_examples\basic"; Components: samples -Source: "samples\wx_examples\hello\*.py"; DestDir: "{app}\wx\samples\wx_examples\hello"; Components: samples -Source: "samples\wx_examples\hello\*.jpg"; DestDir: "{app}\wx\samples\wx_examples\hello"; Components: samples - Source: "samples\wxProject\*.txt"; DestDir: "{app}\wx\samples\wxProject"; Components: samples Source: "samples\wxProject\*.py"; DestDir: "{app}\wx\samples\wxProject"; Components: samples @@ -256,12 +252,9 @@ Name: "{group}\Resource Editor"; Filename: "{code:GetPythonDir}\pythonw.ex Name: "{group}\Sample Apps"; Filename: "{app}\wx\samples"; Components: samples Name: "{group}\wxWindows Reference"; Filename: "{app}\wx\docs\wx.chm"; Components: docs -Name: "{group}\wxOGL Reference"; Filename: "{app}\wx\docs\ogl.chm"; Components: docs -Name: "{group}\licence.txt"; Filename: "{app}\wx\docs\licence\licence.txt"; Components: core -Name: "{group}\README.txt"; Filename: "{app}\wx\docs\README.txt"; Components: docs -Name: "{group}\CHANGES.txt"; Filename: "{app}\wx\docs\CHANGES.txt"; Components: docs Name: "{group}\Migration Guide"; Filename: "{app}\wx\docs\MigrationGuide.html"; Components: docs -Name: "{group}\Other wxPython Docs"; Filename: "{app}\wx\docs\wxPythonDocs.html"; Components: docs +Name: "{group}\CHANGES"; Filename: "{app}\wx\docs\CHANGES.html"; Components: docs +Name: "{group}\Other Docs"; Filename: "{app}\wx\docs"; Components: docs ;;------------------------------------------------------------ diff --git a/wxPython/docs/wxPythonDocs.html b/wxPython/docs/wxPythonDocs.html deleted file mode 100644 index 53eb239a9f..0000000000 --- a/wxPython/docs/wxPythonDocs.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - -wxPython Documentation - - - - - - -
-

wxPython Documentation

- --- - - - - - - - - - - - -
Author:Patrick K. O'Brien
Contact:pobrien@orbtech.com
Organization:Orbtech
Date:2003-07-02
Revision:1.2
-
-

wxPython Manual

-

The wxPython Manual is a reference to the wxPython toolkit.

-
-
-

wxPython Developer Reference

-

The wxPython source code documentation is for developers, and was -created using the Epydoc tool.

-
-
-

wxPython Tutorial

-

The wxPython Tutorial will help get you started with wxPython.

-
-
-

wxPython Examples

-

The wxPython Examples illustrates example programs using wxPython.

-
-
-

wx Package

-

The wxPython wx Package explains the new prefix-less wx package.

-
-
-

Py Manual

-

The Py Manual documents the Py collection of programs and source -code modules, including:

-
    -
  • PyAlaCarte
  • -
  • PyAlaMode
  • -
  • PyCrust
  • -
  • PyFilling
  • -
  • PyShell
  • -
  • PyWrap
  • -
-
-
-

Py Developer Reference

-

The Py source code documentation is for developers, and was created -using the Epydoc tool.

-
-
- - - - diff --git a/wxPython/docs/wxPythonDocs.txt b/wxPython/docs/wxPythonDocs.txt deleted file mode 100644 index cbc378ecc4..0000000000 --- a/wxPython/docs/wxPythonDocs.txt +++ /dev/null @@ -1,77 +0,0 @@ -======================== - wxPython Documentation -======================== - -:Author: Patrick K. O'Brien -:Contact: pobrien@orbtech.com -:Organization: Orbtech_ -:Date: $Date$ -:Revision: $Revision$ - -.. _Orbtech: http://www.orbtech.com/ - - -wxPython Manual -=============== - -`The wxPython Manual`_ is a reference to the wxPython toolkit. - -.. _The wxPython Manual: wxPythonManual.html - - -wxPython Developer Reference -============================ - -`The wxPython source code documentation`_ is for developers, and was -created using the Epydoc tool. - -.. _The wxPython source code documentation: http://www.orbtech.com/www/wx/epydoc/ - - -wxPython Tutorial -================= - -`The wxPython Tutorial`_ will help get you started with wxPython. - -.. _The wxPython Tutorial: wxPythonTutorial.html - - -wxPython Examples -================= - -`The wxPython Examples`_ illustrates example programs using wxPython. - -.. _The wxPython Examples: wxPythonExamples.html - - -wx Package -========== - -`The wxPython wx Package`_ explains the new prefix-less wx package. - -.. _The wxPython wx Package: wxPackage.html - - -Py Manual -========= - -`The Py Manual`_ documents the Py collection of programs and source -code modules, including: - -* PyAlaCarte -* PyAlaMode -* PyCrust -* PyFilling -* PyShell -* PyWrap - -.. _The Py Manual: PyManual.html - - -Py Developer Reference -====================== - -`The Py source code documentation`_ is for developers, and was created -using the Epydoc tool. - -.. _The Py source code documentation: http://www.orbtech.com/www/wx/epydoc/public/wx.py-module.html diff --git a/wxPython/docs/wxPythonExamples.html b/wxPython/docs/wxPythonExamples.html deleted file mode 100644 index ef24fde165..0000000000 --- a/wxPython/docs/wxPythonExamples.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - -Example Programs Using wxPython - - - - - - -
-

Example Programs Using wxPython

-

A survival guide for the post-wx-prefixed world.

- --- - - - - - - - - - - - -
Author:Patrick K. O'Brien
Contact:pobrien@orbtech.com
Organization:Orbtech
Date:2003-07-02
Revision:1.2
- -
-

Introduction

-

This document illustrates example programs using wxPython. All the -examples make use of the new wx package syntax introduced in wxPython -2.4.1, which is a bit different than older examples you might come -across.

-
-
-

Background (with tongue firmly in cheek)

-

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.

-
-

Note

-

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 (beginning with wxPython -version 2.4.1). 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...

-

If you want more of the technical details, read the wx package -documentation.

-
-

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 Program Example

-

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 PyWrap -"wrapper" utility (pywrap) 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 PyWrap runtime wrapper and debug your -frames independent of your full application.

-

Here is the module (frame.py) that defines the frame class:

-
-#!/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()
-
-
-

And here is the module (app.py) that defines the application class -and imports the frame from frame.py:

-
-#!/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()
-
-
-
-
-

Hello wxPython Example

-

This program displays an image file (wxPython.jpg) inside a frame -sized to match the graphic.

-
-

screenshots/hello-win98.png

-

Running hello.py on Windows.

-
-
-

screenshots/hello-linux.png

-

Running hello.py on Linux.

-
-
-

screenshots/hello-mac.png

-

Running hello.py on Mac OS X.

-
-

Here is the source code for hello.py:

-
-#!/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()
-
-
-
-
- - - - diff --git a/wxPython/docs/wxPythonExamples.txt b/wxPython/docs/wxPythonExamples.txt deleted file mode 100644 index 80c178a6ae..0000000000 --- a/wxPython/docs/wxPythonExamples.txt +++ /dev/null @@ -1,118 +0,0 @@ -================================= - Example Programs Using wxPython -================================= - --------------------------------------------------- - A survival guide for the post-wx-prefixed world. --------------------------------------------------- - -:Author: Patrick K. O'Brien -:Contact: pobrien@orbtech.com -:Organization: Orbtech_ -:Date: $Date$ -:Revision: $Revision$ - -.. _Orbtech: http://www.orbtech.com/ - -.. contents:: - - -Introduction -============ - -This document illustrates example programs using wxPython. All the -examples make use of the new wx package syntax introduced in wxPython -2.4.1, which is a bit different than older examples you might come -across. - - -Background (with tongue firmly in cheek) -======================================== - -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. - -.. note:: 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 (beginning with wxPython - version 2.4.1). 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... - - If you want more of the technical details, read the `wx package - documentation`_. - - .. _wx package documentation: wxPackage.html - - -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 Program Example -===================== - -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 PyWrap -"wrapper" utility (``pywrap``) 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 PyWrap runtime wrapper and debug your -frames independent of your full application. - -Here is the module (``frame.py``) that defines the frame class: - -.. include:: ../samples/wx_examples/basic/frame.py - :literal: - -And here is the module (``app.py``) that defines the application class -and imports the frame from ``frame.py``: - -.. include:: ../samples/wx_examples/basic/app.py - :literal: - - -Hello wxPython Example -====================== - -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:: ../samples/wx_examples/hello/hello.py - :literal: - diff --git a/wxPython/docs/wxPythonTutorial.html b/wxPython/docs/wxPythonTutorial.html deleted file mode 100644 index 3def21c9a0..0000000000 --- a/wxPython/docs/wxPythonTutorial.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - -The wxPython Tutorial - - - - - - -
-

The wxPython Tutorial

-

How to get up and running with wxPython

- --- - - - - - - - - - - - - - -
Author:Patrick K. O'Brien
Contact:pobrien@orbtech.com
Organization:Orbtech
Date:2003-07-02
Revision:1.2
License:wxWindows Free Documentation Licence, Version 3
- -
-

Introduction

-

This is a tutorial for the wxPython GUI toolkit. It uses the new wx -package syntax that was introduced in wxPython 2.4.1.

-
-
-

What is wxPython?

-

wxPython is a GUI toolkit for the Python programming language. It -allows Python programmers to create programs with a graphical user -interface for Windows, Linux, and Mac OS X.

-
-
-

License

-

This document adheres to the same license as the other documentation -that comes with wxWindows:

-
-                wxWindows Free Documentation Licence, Version 3
-                ===============================================
-
-  Copyright (c) 1998 Julian Smart, Robert Roebling et al
-
-  Everyone is permitted to copy and distribute verbatim copies
-  of this licence document, but changing it is not allowed.
-   
-                   WXWINDOWS FREE DOCUMENTATION LICENCE
-     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  1. Permission is granted to make and distribute verbatim copies of this
-  manual or piece of documentation provided any copyright notice and this
-  permission notice are preserved on all copies.
-
-  2. Permission is granted to process this file or document through a
-  document processing system and, at your option and the option of any third
-  party, print the results, provided a printed document carries a copying
-  permission notice identical to this one.
-
-  3. Permission is granted to copy and distribute modified versions of this
-  manual or piece of documentation under the conditions for verbatim
-  copying, provided also that any sections describing licensing conditions
-  for this manual, such as, in particular, the GNU General Public Licence,
-  the GNU Library General Public Licence, and any wxWindows Licence are
-  included exactly as in the original, and provided that the entire
-  resulting derived work is distributed under the terms of a permission
-  notice identical to this one.
-
-  4. Permission is granted to copy and distribute translations of this
-  manual or piece of documentation into another language, under the above
-  conditions for modified versions, except that sections related to
-  licensing, including this paragraph, may also be included in translations
-  approved by the copyright holders of the respective licence documents in
-  addition to the original English.
-
-                            WARRANTY DISCLAIMER
-
-  5. BECAUSE THIS MANUAL OR PIECE OF DOCUMENTATION IS LICENSED FREE OF CHARGE,
-  THERE IS NO WARRANTY FOR IT, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 
-  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
-  PARTIES PROVIDE THIS MANUAL OR PIECE OF DOCUMENTATION "AS IS" WITHOUT
-  WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-  PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF
-  THE MANUAL OR PIECE OF DOCUMENTATION IS WITH YOU.  SHOULD THE MANUAL OR
-  PIECE OF DOCUMENTATION PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
-  NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  6. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
-  ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-  REDISTRIBUTE THE MANUAL OR PIECE OF DOCUMENTATION AS PERMITTED ABOVE, BE
-  LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-  CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-  MANUAL OR PIECE OF DOCUMENTATION (INCLUDING BUT NOT LIMITED TO LOSS OF
-  DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-  PARTIES OR A FAILURE OF A PROGRAM BASED ON THE MANUAL OR PIECE OF
-  DOCUMENTATION TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
-  OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-
-
-
-
- - - - diff --git a/wxPython/docs/wxPythonTutorial.txt b/wxPython/docs/wxPythonTutorial.txt deleted file mode 100644 index 683aa18790..0000000000 --- a/wxPython/docs/wxPythonTutorial.txt +++ /dev/null @@ -1,43 +0,0 @@ -======================= - The wxPython Tutorial -======================= - ------------------------------------------ - How to get up and running with wxPython ------------------------------------------ - -:Author: Patrick K. O'Brien -:Contact: pobrien@orbtech.com -:Organization: Orbtech_ -:Date: $Date$ -:Revision: $Revision$ -:License: wxWindows Free Documentation Licence, Version 3 - -.. _Orbtech: http://www.orbtech.com/ - -.. contents:: - - -Introduction -============ - -This is a tutorial for the wxPython GUI toolkit. It uses the new wx -package syntax that was introduced in wxPython 2.4.1. - - -What is wxPython? -================= - -wxPython is a GUI toolkit for the Python programming language. It -allows Python programmers to create programs with a graphical user -interface for Windows, Linux, and Mac OS X. - - -License -======= - -This document adheres to the same license as the other documentation -that comes with wxWindows: - -.. include:: ../licence/licendoc.txt - :literal: diff --git a/wxPython/samples/wx_examples/basic/__init__.py b/wxPython/samples/wx_examples/basic/__init__.py deleted file mode 100644 index b929a7db76..0000000000 --- a/wxPython/samples/wx_examples/basic/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# Python package. diff --git a/wxPython/samples/wx_examples/basic/app.py b/wxPython/samples/wx_examples/basic/app.py deleted file mode 100755 index 09013ed834..0000000000 --- a/wxPython/samples/wx_examples/basic/app.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env python - -"""Basic application class.""" - -__author__ = "Patrick K. O'Brien " -__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() diff --git a/wxPython/samples/wx_examples/basic/frame.py b/wxPython/samples/wx_examples/basic/frame.py deleted file mode 100755 index 3bcecb9f75..0000000000 --- a/wxPython/samples/wx_examples/basic/frame.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python - -"""Basic frame class, with App for testing.""" - -__author__ = "Patrick K. O'Brien " -__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() diff --git a/wxPython/samples/wx_examples/hello/__init__.py b/wxPython/samples/wx_examples/hello/__init__.py deleted file mode 100644 index b929a7db76..0000000000 --- a/wxPython/samples/wx_examples/hello/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# Python package. diff --git a/wxPython/samples/wx_examples/hello/hello.py b/wxPython/samples/wx_examples/hello/hello.py deleted file mode 100755 index 63a29b5666..0000000000 --- a/wxPython/samples/wx_examples/hello/hello.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python - -"""Hello, wxPython! program.""" - -__author__ = "Patrick K. O'Brien " -__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() diff --git a/wxPython/samples/wx_examples/hello/wxPython.jpg b/wxPython/samples/wx_examples/hello/wxPython.jpg deleted file mode 100644 index 9770d4e9b875606a97d3e6cb023b21f1ff85df95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14557 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 Bis=9V -- 2.45.2