\docparam{resource}{Name of a Windows accelerator.}
+\pythonnote{The wxPython constructor accepts a list of
+wxAcceleratorEntry objects, or 3-tuples consisting of flags, keyCode,
+and cmd values like you would construct wxAcceleratorEntry objects with.}
+
\membersection{wxAcceleratorTable::\destruct{wxAcceleratorTable}}
\func{}{\destruct{wxAcceleratorTable}}{\void}
\docparam{pos}{Position before which to insert the items: for example, if {\it pos} is 0 the items
will be inserted in the beginning of the listbox}
+\pythonnote{The first two parameters are collapsed into a single
+parameter for wxPython, which is a list of strings.}
+
\membersection{wxListBox::Number}\label{wxlistboxnumber}
\constfunc{int}{Number}{\void}
text control will appear for in-place editing.
If the user changed the label (i.e. s/he does not press ESC or leave
-the text control without changes, a EVT\_LIST\_END\_LABEL\_EDIT event
+the text control without changes, a EVT\_LIST\_END\_LABEL\_EDIT event
will be sent which can be vetoed as well.
\membersection{wxListCtrl::EnsureVisible}\label{wxlistctrlensurevisible}
Gets information about the item. See \helpref{wxListCtrl::SetItem}{wxlistctrlsetitem} for more
information.
-\pythonnote{The wxPython version of this method takes a parameter
-representing the item ID, and returns the wxListItem object.
+\pythonnote{The wxPython version of this method takes an integer parameter
+for the item ID, and returns the wxListItem object.
}
\membersection{wxListCtrl::GetItemData}\label{wxlistctrlgetitemdata}
\section{\class{wxSizer}}\label{wxsizer}
wxSizer is the abstract base class used for laying out subwindows in a window. You
-cannot use wxSizer directly; instead, you'll have to use \helpref{wxBoxSizer}{wxboxsizer}
+cannot use wxSizer directly; instead, you'll have to use \helpref{wxBoxSizer}{wxboxsizer}
or \helpref{wxStaticBoxSizer}{wxstaticboxsizer}.
The layout algorithm used by sizers in wxWindows closely related to layout
based upon the idea of the individual subwindows reporting their minimal required
size and their ability to get stretched if the size of the parent window has changed.
This will most often mean, that the programmer does not set the original size of
-the dialog in the beginning, rather the top-most sizer will get queried and it will
+the dialog in the beginning, rather the top-most sizer will get queried and it will
then query its children. Its children can be normal windows or other sizers, so that
a hierachy of sizer can be constructed. Note that sizer are not derived from wxWindows
and thus do not interfere with tab ordering and require very little resources compared
the standard font as well as the overall design of Motif widgets requires more space than
on Windows, the intial dialog size will automatically be bigger on Motif than on Windows.
+\pythonnote{If you wish to create a sizer class in wxPython you should
+derive the class from \tt{wxPySizer} in order to get Python-aware
+capabilities for the various virtual methods.}
+
\wxheading{Derived from}
\helpref{wxObject}{wxobject}
\membersection{wxSizer::Add}\label{wxsizeradd}
-\func{void}{Add}{\param{wxWindow* }{window}, \param{int }{option = 0}, \param{int }{flag = 0}, \param{int }{border = 0}}
+\func{void}{Add}{\param{wxWindow* }{window}, \param{int }{option = 0},\param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
-\func{void}{Add}{\param{wxSizer* }{sizer}, \param{int }{option = 0}, \param{int }{flag = 0}, \param{int }{border = 0}}
+\func{void}{Add}{\param{wxSizer* }{sizer}, \param{int }{option = 0}, \param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
-\func{void}{Add}{\param{int }{width}, \param{int }{height}, \param{int }{option = 0}, \param{int }{flag = 0}, \param{int }{border = 0}}
+\func{void}{Add}{\param{int }{width}, \param{int }{height}, \param{int }{option = 0}, \param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
Adds the {\it window} to the sizer. As wxSizer itself is an abstract class, the parameters
have no meaning in the wxSizer class itself, but as there currently is only one class
to indicate if a child of a sizer can change its size in the main orientation of the wxBoxSizer - where
0 stands for not changable and a value of more than zero in interpreted relative to the value of other
children of the same wxBoxSizer. You might, e.g., have a horizontal wxBoxSizer with three children, two
-of which are supposed to change their size with the sizer, then the two stretchable windows would get a
+of which are supposed to change their size with the sizer, then the two stretchable windows would get a
value of 1 each to make them grow and shrink equally with the sizer's vertical dimension.}
\docparam{flag}{This parameter can be used to set a number of flags which can be combined using
\docparam{border}{Determines the border width, if the {\it flag} parameter is set to any border.}
+\docparam{userData}{Allows an extra object to be attached to the sizer
+item, for use in derived classes when sizing information is more
+complex than what {\it option} and {\it flag} will allow for.}
+
\membersection{wxSizer::Prepend}\label{wxsizerprepend}
-\func{void}{Prepend}{\param{wxWindow* }{window}, \param{int }{option = 0}, \param{int }{flag = 0}, \param{int }{border = 0}}
+\func{void}{Prepend}{\param{wxWindow* }{window}, \param{int }{option = 0}, \param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
-\func{void}{Prepend}{\param{wxSizer* }{sizer}, \param{int }{option = 0}, \param{int }{flag = 0}, \param{int }{border = 0}}
+\func{void}{Prepend}{\param{wxSizer* }{sizer}, \param{int }{option = 0}, \param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
-\func{void}{Prepend}{\param{int }{width}, \param{int }{height}, \param{int }{option = 0}, \param{int }{flag = 0}, \param{int }{border = 0}}
+\func{void}{Prepend}{\param{int }{width}, \param{int }{height}, \param{int }{option = 0}, \param{int }{flag = 0}, \param{int }{border= 0}, \param{wxObject* }{userData = NULL}}
Same as \helpref{wxSizer::Add}{wxsizeradd}, but prepends the items to the beginning of the
list of items (windows, subsizers or spaces) owned by this sizer.
\func{void}{SetSizeHints}{\param{wxWindow* }{window}}
-Tell the sizer to set the minimal size of the {\it window} to match the sizer's minimal size.
+Tell the sizer to set the minimal size of the {\it window} to match the sizer's minimal size.
This is commonly done in the constructor of the window itself, see sample in the description
of \helpref{wxBoxSizer}{wxboxsizer} if the window is resizable (as many dialogs under Unix and
frames on probably all platforms).
\constfunc [3] {{\bf #1} {\bf #2}(#3) {\bf const}\index{#2}}
\windowstyle [1] {{\bf #1}\index{#1}}
\bftt [1] {\bf{\tt{#1}}}
-\pythonnote [1] {{\bf \fcol{blue}{wxPython note:}}\\ #1}
+\pythonnote [1] {{\bf \fcol{blue}{wxPython note:}} #1}
%\pythonnote [1] {}
text control will appear for in-place editing.
If the user changed the label (i.e. s/he does not press ESC or leave
-the text control without changes, a EVT\_TREE\_END\_LABEL\_EDIT event
+the text control without changes, a EVT\_TREE\_END\_LABEL\_EDIT event
will be sent which can be vetoed as well.
\wxheading{See also}
if it was not (in this case {\it rect} is not changed) - for example, if the
item is currently invisible.
+\pythonnote{The wxPython version of this method requires only the
+\tt{item} and \tt{textOnly} parameters. The return value is either a
+\tt{wxRect} object or \tt{None}.}
+
\membersection{wxTreeCtrl::GetChildrenCount}\label{wxtreectrlgetchildrencount}
\constfunc{size\_t}{GetChildrenCount}{\param{const wxTreeItemId\&}{ item}, \param{bool}{ recursively = TRUE}}
\constfunc{int}{GetItemSelectedImage}{\param{const wxTreeItemId\& }{item}}
-Gets the selected item image (this function is obsolete, use
+Gets the selected item image (this function is obsolete, use
{\tt GetItemImage(item, wxTreeItemIcon\_Selected} instead).
\membersection{wxTreeCtrl::GetSelection}\label{wxtreectrlgetselection}
\constfunc{wxTreeItemId}{GetSelection}{\void}
Returns the selection, or an invalid item if there is no selection.
-This function only works with the controls without wxTR\_MULTIPLE style, use
+This function only works with the controls without wxTR\_MULTIPLE style, use
\helpref{GetSelections}{wxtreectrlgetselections} for the controls which do have
this style.
Returns the number of selected items.
+\pythonnote{The wxPython version of this method accepts no parameters
+and returns a Python list of \tt{wxTreeItemId}'s.}
+
\membersection{wxTreeCtrl::HitTest}\label{wxtreectrlhittest}
\func{long}{HitTest}{\param{const wxPoint\& }{point}, \param{int\& }{flags}}
\param{int }{image},
\param{wxTreeItemIcon }{which = wxTreeItemIcon\_Normal}}
-Sets the specified item image. See \helpref{GetItemImage}{wxtreectrlgetitemimage}
+Sets the specified item image. See \helpref{GetItemImage}{wxtreectrlgetitemimage}
for the description of {\it which} parameter.
\membersection{wxTreeCtrl::SetItemSelectedImage}\label{wxtreectrlsetitemselectedimage}
\func{void}{SetItemSelectedImage}{\param{const wxTreeItemId\&}{ item}, \param{int }{selImage}}
-Sets the selected item image (this function is obsolete, use
+Sets the selected item image (this function is obsolete, use
{\tt SetItemImage(item, wxTreeItemIcon\_Selected} instead).
\membersection{wxTreeCtrl::SetItemText}\label{wxtreectrlsetitemtext}
\func{void}{UnselectAll}{\void}
-This function either behaves the same as \helpref{Unselect}{wxtreectrlunselect}
+This function either behaves the same as \helpref{Unselect}{wxtreectrlunselect}
if the control doesn't have wxTR\_MULTIPLE style, or removes the selection from
all items if it does have this style.
\wxheading{See also}
-\helpref{Validator overview}{validatoroverview}, \helpref{wxValidator}{wxvalidator},
+\helpref{Validator overview}{validatoroverview}, \helpref{wxValidator}{wxvalidator},
\helpref{wxTextValidator}{wxtextvalidator}
\latexignore{\rtfignore{\wxheading{Members}}}
\membersection{wxGenericValidator::TransferFromWindow}\label{wxgenericvalidatortransferfromwindow}
-\func{virtual bool}{TransferToWindow}{\param{wxWindow*}{ parent}}
+\func{virtual bool}{TransferToWindow}{}
Transfers the value to the window.
\membersection{wxGenericValidator::TransferToWindow}\label{wxgenericvalidatortransfertowindow}
-\func{virtual bool}{TransferToWindow}{\param{wxWindow*}{ parent}}
+\func{virtual bool}{TransferToWindow}{}
Transfers the window value to the appropriate data type.
For more information, please see \helpref{Validator overview}{validatoroverview}.
+\pythonnote{If you wish to create a validator class in wxPython you should
+derive the class from \tt{wxPyValidator} in order to get Python-aware
+capabilities for the various virtual methods.}
+
\wxheading{Derived from}
\helpref{wxEvtHandler}{wxevthandler}\\
\wxheading{See also}
-\helpref{Validator overview}{validatoroverview},
+\helpref{Validator overview}{validatoroverview},
\helpref{wxTextValidator}{wxtextvalidator},
-\helpref{wxTextValidator}{wxgenericvalidator},
+\helpref{wxGenericValidator}{wxgenericvalidator},
\latexignore{\rtfignore{\wxheading{Members}}}
\membersection{wxValidator::TransferFromWindow}\label{wxvalidatortransferfromwindow}
-\func{virtual bool}{TransferToWindow}{\param{wxWindow*}{ parent}}
+\func{virtual bool}{TransferToWindow}{}
This overridable function is called when the value in the window must be
transferred to the validator. Return FALSE if there is a problem.
\membersection{wxValidator::TransferToWindow}\label{wxvalidatortransfertowindow}
-\func{virtual bool}{TransferToWindow}{\param{wxWindow*}{ parent}}
+\func{virtual bool}{TransferToWindow}{}
This overridable function is called when the value associated with the validator must be
transferred to the window. Return FALSE if there is a problem.
\wxheading{See also}
-\helpref{Validator overview}{validatoroverview}, \helpref{wxValidator}{wxvalidator},
+\helpref{Validator overview}{validatoroverview}, \helpref{wxValidator}{wxvalidator},
\helpref{wxGenericValidator}{wxgenericvalidator}
\latexignore{\rtfignore{\wxheading{Members}}}
\membersection{wxTextValidator::TransferFromWindow}\label{wxtextvalidatortransferfromwindow}
-\func{virtual bool}{TransferToWindow}{\param{wxWindow*}{ parent}}
+\func{virtual bool}{TransferFromWindow}{}
Transfers the string value to the window.
\membersection{wxTextValidator::TransferToWindow}\label{wxtextvalidatortransfertowindow}
-\func{virtual bool}{TransferToWindow}{\param{wxWindow*}{ parent}}
+\func{virtual bool}{TransferToWindow}{}
Transfers the window value to the string.
\wxheading{Python}
-So what is Python? Go to
+So what is Python? Go to
\urlref{http://www.python.org}{http://www.python.org} to learn more,
but in a nutshell Python is an interpreted,
interactive, object-oriented programming language. It is often
So why would you want to use wxPython over just C++ and wxWindows?
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
+I absolutely have to eek more performance out of an algorithm, and even
then I ususally code it as an extension module and leave the majority
of the program in Python.
There are quite a few other GUI modules available for Python, some in
active use, some that havn'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 \urlref{this link}{http://www.python.org/download/Contributed.html\#Graphics}
+cross-platform compatible. See \urlref{this link}{http://www.python.org/download/Contributed.html\#Graphics}
for a listing of a few of them.
%----------------------------------------------------------------------
I added a few minor features to SWIG to control some of the code
generation. If you want to play around with this you will need to get
-a recent version of SWIG from their CVS or from a daily build. See
+a recent version of SWIG from their CVS or from a daily build. See
\urlref{http://www.swig.org/}{http://www.swig.org/} for details.
wxPython is organized as a Python package. This means that the
For Win32 systems I use Visual C++ 6.0, but 5.0 should work also. The
build utility currently does not support any other Win32 compilers.
+
\item At this point you may want to make an alias or symlink, script,
batch file, whatever on the PATH that invokes \tt{\$(WXWIN)/utils/wxPython/distrib/build.py} to
help simplify matters somewhat. For example, on my Win32 system I have a file named
\tt{python \%WXWIN/utils/wxPython/distrib/build.py \%1 \%2 \%3 \%4 \%5 \%6}
\item Change into the \tt{\$(WXWIN)/utils/wxPython/src} directory.
+
\item Type "\tt{build -b}" to build wxPython and "\tt{build -i}" to
install it, or "\tt{build -bi}" to do both steps at once.
a different way, take a look at the docstring in build.py. You are
able to to override many configuration options in a file named
build.local.
+
\item To build and install the add-on modules, change to the appropriate
directory under \tt{\$(WXWIN)/utils/wxPython/modules} and run the build
utility again.
+
\item Change to the \tt{\$(WXWIN)/utils/wxPython/demo} directory.
+
\item Try executing the demo program. For example:
\tt{python demo.py}
namespace pollution you can use "\tt{from wxPython import wx}" and
then access all the wxPython identifiers through the wx module, for
example, "\tt{wx.wxFrame}".
+
\item 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 wxWindows employs. But since static event
same to dynamically build the table. The only real difference is
that the first arguemnt to the event helpers is always the window that
the event table entry should be added to.
+
\item Notice the use of \tt{wxDLG\_PNT} and \tt{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++.
+
\item There is an \tt{OnCloseWindow} method at line 34 but no call to
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
C++ classes in this area to determine what is \em{standard} but since
that changes from time to time I can make no guarentees, nor will it
be fully documented. When in doubt, use an EVT\_*** function.
+
\item 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
have a \_\_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.
+
\item Just like wxWindows in C++, wxPython apps need to create a class
derived from \tt{wxApp} (line 56) that implements a method named
\tt{OnInit}, (line 59.) This method should create the application's
main window (line 62) and use \tt{wxApp.SetTopWindow()} (line 66) to
inform wxWindows about it.
+
\item And finally, at line 72 an instance of the application class is
created. At this point wxPython finishes initializing itself, and calls
the \tt{OnInit} method to get things started. (The zero parameter here is
\item \helpref{wxBitmapButton}{wxbitmapbutton}
\item \helpref{wxBitmap}{wxbitmap}
\item wxBMPHandler
+\item \helpref{wxBoxSizer}{wxBoxSizer}
\item \helpref{wxBrush}{wxbrush}
\item \helpref{wxButton}{wxbutton}
\item \helpref{wxCalculateLayoutEvent}{wxcalculatelayoutevent}
\item wxGridCell
\item wxGridEvent
\item \helpref{wxGrid}{wxgrid}
+\item \helpref{wxHtmlCell}{wxHtmlCell}
+\item \helpref{wxHtmlContainerCell}{wxHtmlContainerCell}
+\item \helpref{wxHtmlParser}{wxHtmlParser}
+\item \helpref{wxHtmlTagHandler}{wxHtmlTagHandler}
+\item \helpref{wxHtmlTag}{wxHtmlTag}
+\item \helpref{wxHtmlWinParser}{wxHtmlWinParser}
+\item \helpref{wxHtmlWinTagHandler}{wxHtmlWinTagHandler}
+\item \helpref{wxHtmlWindow}{wxHtmlWindow}
\item wxIconizeEvent
\item \helpref{wxIcon}{wxicon}
\item \helpref{wxIdleEvent}{wxidleevent}
\item \helpref{wxScrollBar}{wxscrollbar}
\item \helpref{wxScrollEvent}{wxscrollevent}
\item \helpref{wxScrolledWindow}{wxscrolledwindow}
+\item \helpref{wxScrollWinEvent}{wxscrollwinevent}
\item wxShowEvent
\item \helpref{wxSingleChoiceDialog}{wxsinglechoicedialog}
\item \helpref{wxSizeEvent}{wxsizeevent}
\item \helpref{wxSize}{wxsize}
+\item \helpref{wxSizer}{wxSizer}
+\item wxSizerItem
\item \helpref{wxSlider}{wxslider}
\item \helpref{wxSpinButton}{wxspinbutton}
\item wxSpinEvent
\item \helpref{wxSplitterWindow}{wxsplitterwindow}
\item \helpref{wxStaticBitmap}{wxstaticbitmap}
\item \helpref{wxStaticBox}{wxstaticbox}
+\item \helpref{wxStaticBoxSizer}{wxStaticBoxSizer}
\item wxStaticLine
\item \helpref{wxStaticText}{wxstatictext}
\item \helpref{wxStatusBar}{wxstatusbar}
\item \helpref{wxTreeItemData}{wxtreeitemdata}
\item wxTreeItemId
\item \helpref{wxUpdateUIEvent}{wxupdateuievent}
+\item \helpref{wxValidator}{wxvalidator}
\item \helpref{wxWindowDC}{wxwindowdc}
\item \helpref{wxWindow}{wxwindow}
+
+
+
\end{itemize}
%----------------------------------------------------------------------