| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        python.h
 
- // Purpose:     topic overview
 
- // Author:      wxWidgets team
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- /**
 
- @page overview_python wxPython Overview
 
- @tableofcontents
 
- This topic was written by Robin Dunn, author of the
 
- <a href="http://www.python.org/">wxPython</a> wrapper.
 
- @section overview_python_what What is wxPython?
 
- wxPython is a blending of the wxWidgets GUI classes and the Python programming
 
- language.
 
- @subsection overview_python_what_py Python
 
- So what is Python?  Go to http://www.python.org to learn more, but in a
 
- nutshell Python is an interpreted, interactive, object-oriented programming
 
- language. It is often compared to Tcl, Perl, Scheme or Java.
 
- Python combines remarkable power with very clear syntax. It has modules,
 
- classes, exceptions, very high level dynamic data types, and dynamic typing.
 
- There are interfaces to many system calls and libraries, and new built-in
 
- modules are easily written in C or C++. Python is also usable as an extension
 
- language for applications that need a programmable interface.
 
- Python is copyrighted but freely usable and distributable, even for commercial
 
- use.
 
- @subsection overview_python_what_wxpy wxPython
 
- wxPython is a Python package that can be imported at runtime that includes a
 
- collection of Python modules and an extension module (native code). It provides
 
- a series of Python classes that mirror (or shadow) many of the wxWidgets GUI
 
- classes. This extension module attempts to mirror the class hierarchy of
 
- wxWidgets as closely as possible. This means that there is a wxFrame class in
 
- wxPython that looks, smells, tastes and acts almost the same as the wxFrame
 
- class in the C++ version.
 
- wxPython is very versatile. It can be used to create standalone GUI
 
- applications, or in situations where Python is embedded in a C++ application as
 
- an internal scripting or macro language.
 
- Currently wxPython is available for Win32 platforms and the GTK toolkit (wxGTK)
 
- on most Unix/X-windows platforms. See the wxPython website http://wxPython.org/
 
- for details about getting wxPython working for you.
 
- @section overview_python_why Why Use wxPython?
 
- So why would you want to use wxPython over just C++ and wxWidgets? Personally I
 
- prefer using Python for everything. I only use C++ when I absolutely have to
 
- eke more performance out of an algorithm, and even then I usually code it as an
 
- extension module and leave the majority of the program in Python.
 
- Another good thing to use wxPython for is quick prototyping of your wxWidgets
 
- apps. With C++ you have to continuously go though the edit-compile-link-run
 
- cycle, which can be quite time consuming. With Python it is only an edit-run
 
- cycle. You can easily build an application in a few hours with Python that
 
- would normally take a few days or longer with C++. Converting a wxPython app to
 
- a C++/wxWidgets app should be a straight forward task.
 
- @section overview_python_othergui Other Python GUIs
 
- There are other GUI solutions out there for Python.
 
- @subsection overview_python_othergui_tkinter Tkinter
 
- Tkinter is the de facto standard GUI for Python. It is available on nearly
 
- every platform that Python and Tcl/TK are. Why Tcl/Tk? Well because Tkinter is
 
- just a wrapper around Tcl's GUI toolkit, Tk. This has it's upsides and it's
 
- downsides...
 
- The upside is that Tk is a pretty versatile toolkit. It can be made to do a lot
 
- of things in a lot of different environments. It is fairly easy to create new
 
- widgets and use them interchangeably in your programs.
 
- The downside is Tcl. When using Tkinter you actually have two separate language
 
- interpreters running, the Python interpreter and the Tcl interpreter for the
 
- GUI. Since the guts of Tcl is mostly about string processing, it is fairly slow
 
- as well. (Not too bad on a fast Pentium II, but you really notice the
 
- difference on slower machines.)
 
- It wasn't until the latest version of Tcl/Tk that native Look and Feel was
 
- possible on non-Motif platforms. This is because Tk usually implements its own
 
- widgets (controls) even when there are native controls available.
 
- Tkinter is a pretty low-level toolkit. You have to do a lot of work (verbose
 
- program code) to do things that would be much simpler with a higher level of
 
- abstraction.
 
- @subsection overview_python_othergui_pythonwin PythonWin
 
- PythonWin is an add-on package for Python for the Win32 platform. It includes
 
- wrappers for MFC as well as much of the Win32 API. Because of its foundation,
 
- it is very familiar for programmers who have experience with MFC and the Win32
 
- API. It is obviously not compatible with other platforms and toolkits.
 
- PythonWin is organized as separate packages and modules so you can use the
 
- pieces you need without having to use the GUI portions.
 
- @subsection overview_python_othergui_others Others
 
- There are quite a few other GUI modules available for Python, some in active
 
- use, some that haven't been updated for ages. Most are simple wrappers around
 
- some C or C++ toolkit or another, and most are not cross-platform compatible.
 
- See <a href="http://pypi.python.org/pypi?:action=browse&show=all&c=433">this link</a>
 
- for a listing of a few of them.
 
- @section overview_python_using Using wxPython
 
- I'm not going to try and teach the Python language here. You can do that at the
 
- <a href="http://www.python.org/doc/tut/tut.html">Python Tutorial</a>. I'm also
 
- going to assume that you know a bit about wxWidgets already, enough to notice
 
- the similarities in the classes used.
 
- Take a look at the following wxPython program. You can find a similar program
 
- in the @c wxPython/demo directory, named @c DialogUnits.py. If your Python and
 
- wxPython are properly installed, you should be able to run it by issuing this
 
- command:
 
- @code
 
- python DialogUnits.py
 
- @endcode
 
- @code
 
- 01: ## import all of the wxPython GUI package
 
- 02: from wxPython.wx import *
 
- 03:
 
- 04: ## Create a new frame class, derived from the wxPython Frame.
 
- 05: class MyFrame(wxFrame):
 
- 06:
 
- 07:     def __init__(self, parent, id, title):
 
- 08:         # First, call the base class' __init__ method to create the frame
 
- 09:         wxFrame.__init__(self, parent, id, title,
 
- 10:                          wxPoint(100, 100), wxSize(160, 100))
 
- 11:
 
- 12:         # Associate some events with methods of this class
 
- 13:         EVT_SIZE(self, self.OnSize)
 
- 14:         EVT_MOVE(self, self.OnMove)
 
- 15:
 
- 16:         # Add a panel and some controls to display the size and position
 
- 17:         panel = wxPanel(self, -1)
 
- 18:         wxStaticText(panel, -1, "Size:",
 
- 19:                      wxDLG_PNT(panel, wxPoint(4, 4)),  wxDefaultSize)
 
- 20:         wxStaticText(panel, -1, "Pos:",
 
- 21:                      wxDLG_PNT(panel, wxPoint(4, 14)), wxDefaultSize)
 
- 22:         self.sizeCtrl = wxTextCtrl(panel, -1, "",
 
- 23:                                    wxDLG_PNT(panel, wxPoint(24, 4)),
 
- 24:                                    wxDLG_SZE(panel, wxSize(36, -1)),
 
- 25:                                    wxTE_READONLY)
 
- 26:         self.posCtrl = wxTextCtrl(panel, -1, "",
 
- 27:                                   wxDLG_PNT(panel, wxPoint(24, 14)),
 
- 28:                                   wxDLG_SZE(panel, wxSize(36, -1)),
 
- 29:                                   wxTE_READONLY)
 
- 30:
 
- 31:
 
- 32:     # This method is called automatically when the CLOSE event is
 
- 33:     # sent to this window
 
- 34:     def OnCloseWindow(self, event):
 
- 35:         # tell the window to kill itself
 
- 36:         self.Destroy()
 
- 37:
 
- 38:     # This method is called by the system when the window is resized,
 
- 39:     # because of the association above.
 
- 40:     def OnSize(self, event):
 
- 41:         size = event.GetSize()
 
- 42:         self.sizeCtrl.SetValue("%s, %s" % (size.width, size.height))
 
- 43:
 
- 44:         # tell the event system to continue looking for an event handler,
 
- 45:         # so the default handler will get called.
 
- 46:         event.Skip()
 
- 47:
 
- 48:     # This method is called by the system when the window is moved,
 
- 49:     # because of the association above.
 
- 50:     def OnMove(self, event):
 
- 51:         pos = event.GetPosition()
 
- 52:         self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y))
 
- 53:
 
- 54:
 
- 55: # Every wxWidgets application must have a class derived from wxApp
 
- 56: class MyApp(wxApp):
 
- 57:
 
- 58:     # wxWidgets calls this method to initialize the application
 
- 59:     def OnInit(self):
 
- 60:
 
- 61:         # Create an instance of our customized Frame class
 
- 62:         frame = MyFrame(NULL, -1, "This is a test")
 
- 63:         frame.Show(true)
 
- 64:
 
- 67:
 
- 68:         # Return a success flag
 
- 69:         return true
 
- 70:
 
- 71:
 
- 72: app = MyApp(0)     # Create an instance of the application class
 
- 73: app.MainLoop()     # Tell it to start processing events
 
- 74:
 
- @endcode
 
- @subsection overview_python_using_notice Things to Notice
 
- At line 2 the wxPython classes, constants, and etc. are imported into the
 
- current module's namespace. If you prefer to reduce namespace pollution you can
 
- use @c "from wxPython import wx" and then access all the wxPython identifiers
 
- through the wx module, for example, @c "wx.wxFrame".
 
- At line 13 the frame's sizing and moving events are connected to methods of the
 
- class. These helper functions are intended to be like the event table macros
 
- that wxWidgets employs. But since static event tables are impossible with
 
- wxPython, we use helpers that are named the same to dynamically build the
 
- table. The only real difference is that the first argument to the event helpers
 
- is always the window that the event table entry should be added to.
 
- Notice the use of @c wxDLG_PNT and @c wxDLG_SZE in lines 19-29 to convert from
 
- dialog units to pixels. These helpers are unique to wxPython since Python can't
 
- do method overloading like C++.
 
- There is an @c OnCloseWindow method at line 34 but no call to @c EVT_CLOSE to
 
- attach the event to the method. Does it really get called?  The answer is, yes
 
- it does. This is because many of the standard events are attached to windows
 
- that have the associated standard method names. I have tried to follow the lead
 
- of the C++ classes in this area to determine what is standard but since that
 
- changes from time to time I can make no guarantees, nor will it be fully
 
- documented. When in doubt, use an @c EVT_*** function.
 
- At lines 17 to 21 notice that there are no saved references to the panel or the
 
- static text items that are created. Those of you who know Python might be
 
- wondering what happens when Python deletes these objects when they go out of
 
- scope. Do they disappear from the GUI?  They don't. Remember that in wxPython
 
- the Python objects are just shadows of the corresponding C++ objects. Once the
 
- C++ windows and controls are attached to their parents, the parents manage them
 
- and delete them when necessary. For this reason, most wxPython objects do not
 
- need to have a @c __del__ method that explicitly causes the C++ object to be
 
- deleted. If you ever have the need to forcibly delete a window, use the
 
- Destroy() method as shown on line 36.
 
- Just like wxWidgets in C++, wxPython apps need to create a class derived from
 
- @c wxApp (line 56) that implements a method named @c OnInit, (line 59.) This
 
- method should create the application's main window (line 62) and show it.
 
- And finally, at line 72 an instance of the application class is created. At
 
- this point wxPython finishes initializing itself, and calls the @c OnInit
 
- method to get things started. (The zero parameter here is a flag for
 
- functionality that isn't quite implemented yet. Just ignore it for now.) The
 
- call to @c MainLoop at line 73 starts the event loop which continues until the
 
- application terminates or all the top level windows are closed.
 
- @section overview_python_classes Classes Implemented in wxPython
 
- The following classes are supported in wxPython. Most provide nearly full
 
- implementations of the public interfaces specified in the C++ documentation,
 
- others are less so. They will all be brought as close as possible to the C++
 
- spec over time.
 
- @li wxAcceleratorEntry
 
- @li wxAcceleratorTable
 
- @li wxActivateEvent
 
- @li wxBitmap
 
- @li wxBitmapButton
 
- @li wxBitmapDataObject
 
- @li wxBMPHandler
 
- @li wxBoxSizer
 
- @li wxBrush
 
- @li wxBusyInfo
 
- @li wxBusyCursor
 
- @li wxButton
 
- @li wxCalculateLayoutEvent
 
- @li wxCalendarCtrl
 
- @li wxCaret
 
- @li wxCheckBox
 
- @li wxCheckListBox
 
- @li wxChoice
 
- @li wxClientDC
 
- @li wxClipboard
 
- @li wxCloseEvent
 
- @li wxColourData
 
- @li wxColourDialog
 
- @li wxColour
 
- @li wxComboBox
 
- @li wxCommandEvent
 
- @li wxConfigBase
 
- @li wxControl
 
- @li wxCursor
 
- @li wxCustomDataObject
 
- @li wxDataFormat
 
- @li wxDataObject
 
- @li wxDataObjectComposite
 
- @li wxDataObjectSimple
 
- @li wxDateTime
 
- @li wxDateSpan
 
- @li wxDC
 
- @li wxDialog
 
- @li wxDirDialog
 
- @li wxDragImage
 
- @li wxDropFilesEvent
 
- @li wxDropSource
 
- @li wxDropTarget
 
- @li wxEraseEvent
 
- @li wxEvent
 
- @li wxEvtHandler
 
- @li wxFileConfig
 
- @li wxFileDataObject
 
- @li wxFileDialog
 
- @li wxFileDropTarget
 
- @li wxFileSystem
 
- @li wxFileSystemHandler
 
- @li wxFocusEvent
 
- @li wxFontData
 
- @li wxFontDialog
 
- @li wxFont
 
- @li wxFrame
 
- @li wxFSFile
 
- @li wxGauge
 
- @li wxGIFHandler
 
- @li wxGLCanvas
 
- @li wxHtmlCell
 
- @li wxHtmlContainerCell
 
- @li wxHtmlDCRenderer
 
- @li wxHtmlEasyPrinting
 
- @li wxHtmlParser
 
- @li wxHtmlTagHandler
 
- @li wxHtmlTag
 
- @li wxHtmlWinParser
 
- @li wxHtmlPrintout
 
- @li wxHtmlWinTagHandler
 
- @li wxHtmlWindow
 
- @li wxIconizeEvent
 
- @li wxIcon
 
- @li wxIdleEvent
 
- @li wxImage
 
- @li wxImageHandler
 
- @li wxImageList
 
- @li wxIndividualLayoutConstraint
 
- @li wxInitDialogEvent
 
- @li wxInputStream
 
- @li @ref wxFileSystem "wxInternetFSHandler"
 
- @li wxJoystickEvent
 
- @li wxJPEGHandler
 
- @li wxKeyEvent
 
- @li wxLayoutAlgorithm
 
- @li wxLayoutConstraints
 
- @li wxListBox
 
- @li wxListCtrl
 
- @li wxListEvent
 
- @li wxListItem
 
- @li wxMask
 
- @li wxMaximizeEvent
 
- @li wxMDIChildFrame
 
- @li wxMDIClientWindow
 
- @li wxMDIParentFrame
 
- @li wxMemoryDC
 
- @li wxMemoryFSHandler
 
- @li wxMenuBar
 
- @li wxMenuEvent
 
- @li wxMenuItem
 
- @li wxMenu
 
- @li wxMessageDialog
 
- @li wxMetafileDC
 
- @li wxMiniFrame
 
- @li wxMouseEvent
 
- @li wxMoveEvent
 
- @li wxNotebookEvent
 
- @li wxNotebook
 
- @li wxPageSetupDialogData
 
- @li wxPageSetupDialog
 
- @li wxPaintDC
 
- @li wxPaintEvent
 
- @li wxPalette
 
- @li wxPanel
 
- @li wxPen
 
- @li wxPNGHandler
 
- @li wxPoint
 
- @li wxPostScriptDC
 
- @li wxPreviewFrame
 
- @li wxPrintData
 
- @li wxPrintDialogData
 
- @li wxPrintDialog
 
- @li wxPrinter
 
- @li wxPrintPreview
 
- @li wxPrinterDC
 
- @li wxPrintout
 
- @li wxProcess
 
- @li wxQueryLayoutInfoEvent
 
- @li wxRadioBox
 
- @li wxRadioButton
 
- @li wxRealPoint
 
- @li wxRect
 
- @li wxRegionIterator
 
- @li wxRegion
 
- @li wxSashEvent
 
- @li wxSashLayoutWindow
 
- @li wxSashWindow
 
- @li wxScreenDC
 
- @li wxScrollBar
 
- @li wxScrollEvent
 
- @li ::wxScrolledWindow
 
- @li wxScrollWinEvent
 
- @li wxShowEvent
 
- @li wxSingleChoiceDialog
 
- @li wxSizeEvent
 
- @li wxSize
 
- @li wxSizer
 
- @li wxSizerItem
 
- @li wxSlider
 
- @li wxSpinButton
 
- @li wxSpinEvent
 
- @li wxSplitterWindow
 
- @li wxStaticBitmap
 
- @li wxStaticBox
 
- @li wxStaticBoxSizer
 
- @li wxStaticLine
 
- @li wxStaticText
 
- @li wxStatusBar
 
- @li wxSysColourChangedEvent
 
- @li wxTaskBarIcon
 
- @li wxTextCtrl
 
- @li wxTextDataObject
 
- @li wxTextDropTarget
 
- @li wxTextEntryDialog
 
- @li wxTimer
 
- @li wxTimerEvent
 
- @li wxTimeSpan
 
- @li wxTipProvider
 
- @li wxToolBarTool
 
- @li wxToolBar
 
- @li wxToolTip
 
- @li wxTreeCtrl
 
- @li wxTreeEvent
 
- @li wxTreeItemData
 
- @li wxTreeItemId
 
- @li wxUpdateUIEvent
 
- @li wxValidator
 
- @li wxWindowDC
 
- @li wxWindow
 
- @li @ref wxFileSystem "wxZipFSHandler"
 
- @section overview_python_help Where to Go for Help
 
- Since wxPython is a blending of multiple technologies, help comes from multiple
 
- sources. See http://wxpython.org/ for details on various sources of help, but
 
- probably the best source is the wxPython-users mail list. You can view the
 
- archive or subscribe by going to http://wxpython.org/maillist.php
 
- Or you can send mail directly to the list using this address:
 
- wxpython-users@lists.wxwidgets.org
 
- */
 
 
  |