]> git.saurik.com Git - wxWidgets.git/blob - utils/wxPython/README.txt
updated wxMVCTree, VTK, and the demo
[wxWidgets.git] / utils / wxPython / README.txt
1 wxPython README
2 ---------------
3
4 Welcome to the wonderful world of wxPython!
5
6 Once you have installed the wxPython extension module, you can try it
7 out by going to the [install dir]\wxPython\demo directory and typing:
8
9 python demo.py
10
11 There are also some other sample files there for you to play with and
12 learn from.
13
14 If you selected to install the documentation then point your browser
15 to [install dir]\wxPython\docs\index.htm and you will then be looking
16 at the docs for wxWindows. For the most part you can use the C++ docs
17 as most classes and methods are used identically. Where there are
18 differences they are documented with a "wxPython Note."
19
20 On Win32 systems the binary self-installer creates a program group on
21 the Start Menu that contains a link to running the demo and a link to
22 the help file. To help you save disk space I'm now using Microsoft's
23 HTML Help format. If your system doesn't know what to do with the help
24 file, you can install the HTML Help Viewer as part of IE 4+, NT
25 Service Pack 4+, or the HTML Workshop at
26
27 http://msdn.microsoft.com/workshop/author/htmlhelp/download.asp.
28
29
30
31 Getting Help
32 ------------
33
34 Since wxPython is a blending of multiple technologies, help comes from
35 multiple sources. See the http://alldunn.com/wxPython for details on
36 various sources of help, but probably the best source is the
37 wxPython-users mail list. You can view the archive or subscribe by
38 going to
39
40 http://starship.python.net/mailman/listinfo/wxpython-users
41
42 Or you can send mail directly to the list using this address:
43
44 wxpython-users@starship.python.net
45
46 ----------------------------------------------------------------------
47
48 What's new in 2.1.12
49 --------------------
50 Updated wxMVCTree and added a demo for it.
51
52 Added a wrapper class for the Visualization ToolKit (or VTK) in the
53 wxPython.lib.vtk module. (http://www.kitware.com/)
54
55
56
57
58 What's new in 2.1.11
59 --------------------
60 Skipped a few version numbers so wxMSW, wxGTK and wxPython are all
61 syncronized.
62
63 wxImage.SetData now makes a copy of the image data before giving it to
64 wxImage. I mistakenly thought that wxImage would copy the data
65 itself.
66
67 Fixed wxMSW's notebook so the pages get their size set as they are
68 being added. This should remove the need for our
69 wxNotebook.ResizeChildren hack.
70
71 wxPanels now support AutoLayout, and wxNotebooks and wxSplitterWindows
72 no longer tell their children to Layout() themselves. This will
73 probably only effect you if you have a wxWindow with AutoLayout inside
74 a notebook or splitter. If so, either change it to a wxPanel or add
75 an EVT_SIZE handler that calls Layout().
76
77 Fixed deadlock problem that happened when using threads.
78
79 Added new HTML printing classes.
80
81 Added wxWindow.GetHandle
82
83 Apparently wxMouseEvent.Position has been depreciated in wxWindows as
84 it is no longer available by default. You can use GetPositionTuple
85 (returning a tuple with x,y) instead, or GetPosition (returning a
86 wxPoint.)
87
88 Added wxPostEvent function that allows events to be posted and then
89 processed later. This is a thread-safe way to interact with the GUI
90 thread from other threads.
91
92 Added Clipboard and Drag-and-Drop classes.
93
94 Added wxFontEnumerator.
95
96 Many updates to wxMenu, wxMenuBar.
97
98 wxPyEvent and wxPyCommandEvent derived classes now give you the actual
99 Python object in the event handler instead of a new shadow.
100
101 Added a Calendar widget from Lorne White to the library.
102
103 Made some fixes to the wxFloatbar. It still has some troubles on
104 wxGTK...
105
106 Added an MVC tree control from Bryn Keller to the library.
107
108
109
110
111 What's new in 2.1.5
112 -------------------
113 This is a quick bug-fix release to take care of a few nasties that
114 crept in at the last minute before 2.1.4 was called done. No new
115 major features.
116
117
118
119 What's new in 2.1.4
120 --------------------
121
122 This release is NOT syncronized with a snapshot release of wxGTK or
123 wxMSW. For MSW this isn't much of a problem since you can get the
124 binaries from the web site. For other platforms you'll have to build
125 wxGTK from CVS. (See http://web.ukonline.co.uk/julian.smart/wxwin/cvs.htm)
126 To get the same set of sources from CVS that I used, checkout using
127 the wxPy-2-1-4 tag.
128
129 Now back to what's new...
130
131 Much more support for event-less callbacks and add-on modules.
132
133 Created add-on module with wxOGL classes.
134
135 Added wxWindow.GetChildren(). Be careful of this. It returns a *copy*
136 of the list of the window's children. While you are using the list if
137 anything changes in the real list (a child is deleted, etc.) then the
138 list you are holding will suddenly have window references to garbage
139 memory and your app will likely crash. But if you are careful it works
140 great!
141
142 Added a bunch of new and missing methods to wxTreeCrtl. The
143 SortChildren method is now supported, but currently only for the
144 default sort order.
145
146 Added typemaps for wxSize, wxPoint, wxRealPoint, and wxRect that allow
147 either the actual objects or Python sequence values to be used. For
148 example, the following are equivallent:
149
150 win = wxWindow(parent, size = wxSize(100, 100))
151 win = wxWindow(parent, size = (100, 100))
152
153 Super-charged the wxHtml module. You can now create your own tag
154 handlers and also have access to the parser and cell classes. There
155 is a tag handler in the library at wxPython.lib.wxpTag that
156 understands the WXP tag and is able to place wxPython windows on HTML
157 pages. See the demo for an example.
158
159 A bunch of the methods of wxMenuBar were previously ifdef'd out for
160 wxGTK. Added them back in since the methods exist now.
161
162 Wrapped the wxHtmlHelpController and related classes.
163
164 Wrapped the C++ versions of wxSizer and friends. The Python-only
165 versions are still in the library, but depreciated. (You will get a
166 warning message if you try to use them, but the warning can be
167 disabled.) The usage of the C++ versions is slightly different, and
168 the functionality of wxBorderSizer is now part of wxBoxSizer. I have
169 added a few methods to wxSizer to try and make the transition as
170 smooth as possible, I combined all Add methods into a single method
171 that handles all cases, added an AddMany method, etc. One step I did
172 not take was to make the default value of flag in the Add method be
173 wxGROW. This would have made it more backward compatible, but less
174 portable to and from wxWin C++ code. Please see the docs and demo for
175 further details.
176
177 Added wxPyEvent and wxPyCommandEvent classes, derived from wxEvent and
178 wxCommandEvent. Each of them has SetPyData and GetPyData methods that
179 accept or return a single Python object. You can use these classes
180 directly or derive from them to create your own types of event objects
181 that can pass through the wxWindows event system without loosing their
182 Python parts (as long as they are stored with SetPyData.) Stay tuned
183 for more info and examples in future releases.
184
185 Added wxPython.lib.grids as an example of how to derive a new sizer
186 from the C++ sizers. In this module you will find wxGridSizer and
187 wxFlexGridSizer. wxGridSizer arrainges its items in a grid in which
188 all the widths and heights are the same. wxFlexgridSizer allows
189 different widths and heights, and you can also specify rows and/or
190 columns that are growable. See the demo for a couple examples for how
191 to use them.
192
193 Added the wxValidator class, and created a class named wxPyValidator
194 that should be used for the base class of any Python validators. See
195 the demo for an example. Please note that you MUST implement a Clone
196 method in your validator classes because of the way some things work
197 in the underlying C++ library. I did not add wxTextValidator because
198 of some issues of how it transfers data to and from a wxString, which
199 in wxPython is automatically translated to and from Python strings, so
200 there would never be a concrete wxString that would hang around long
201 enough for the validator to do its job. On the other hand, it should
202 be real easy to duplicate the functionality of wxTextValidator in a
203 pure Python class derived from wxPyValidator.
204
205 I've finally added a feature that has been on my list for close to two
206 years! Ever wondered what that zero is for when you create your app
207 object? Well now you can leave it out or explicitly set it to a true
208 value. This value now controls what is to be done with sys.stdout and
209 sys.stderr. A false value leaves them alone, and a true value sets
210 them to an instance of wxPyOnDemandOutputWindow. (On windows the
211 default is true, on unix platforms the default is false.) This class
212 creates a frame containing a wxTextCtrl as soon as anything is written
213 to sys.stdout or sys.stderr. If you close the window it will come
214 back again the next time something is written. (You can call
215 app.RestoreStdio to turn this off.) If you would rather that the stdio be
216 redirected to a file, you can provide a second parameter to your app
217 object's constructor that is a filename. If you want to use your own
218 class instead of wxPyOnDemandOutputWindow you can either implement
219 RedirectStdio() in you app class or change the value of
220 wxApp.outputWindowClass like this:
221
222 class MyApp(wxApp):
223 outputWindowClass = MyClass
224
225 def OnInit(self):
226 frame = MyFrame()
227 self.SetTopWindow(frame)
228 return true
229
230 Please see the implementation of wxPyOnDemandOutputWindow and wxApp in
231 wx.py for more details. A few words of caution: if you are running
232 your app in a debugger, changing sys.stdout and sys.stderr is likely
233 to really screw things up.
234
235 Added wxCaret. Unfortunately it's author has still not documented it
236 in the wxWindows docs...
237
238 Some new 3rd party contributions in wxPython.lib. PyShell, in
239 shell.py is an interesting implementaion of an interactive Python
240 shell in wxWindows. floatbar.py has a class derived from wxToolBar
241 that can sense mouse drags and then reparent itself into another
242 frame. Moving the new frame close to where it came from puts the tool
243 bar back into the original parent. (Unfortunately there is currently
244 a bug in wxGTK's wxFrame.SetToolBar so the FloatBar has some
245 problems...)
246
247
248
249
250 What's new in 2.1b3
251 --------------------
252
253 This release is syncronized with release 2.1 snapshot 9 of wxWindows.
254
255 Switched to using SWIG from CVS (see http://swig.cs.uchicago.edu/cvs.html)
256 for some of the new features and such. Also they have encorporated my
257 patches so there is really no reason to stick with the current (very
258 old) release... This version of SWIG gives the following new
259 features:
260
261 1. Keyword arguments. You no longer have to specify all the
262 parameters with defaults to a method just to specify a
263 non-default value on the end. You can now do this instead:
264
265 win = wxWindow(parent, -1, style = mystyle)
266
267 2. There is now an an equivalence between Python's None and C++'s
268 NULL. This means that any methods that might return NULL will
269 now return None and you can use none where wxWindows might be
270 expecting NULL. This makes things much more snake-ish.
271
272
273 There is a new build system based on a new Python program instead of
274 raw makefiles. Now wxPython builds are virtually the same on MSW or
275 Unix systems. See the end of this file for new build instructions and
276 see distrib/build.py for more details.
277
278 wxDC.Bilt now includes the useMask parameter, and has been split into
279 two different versions. wxDC.BlitXY is like what was there before and
280 takes raw coordinants and sizes, and the new wxDC.Blit is for the new
281 interface using wxPoints and a wxSize.
282
283
284
285
286
287 What's new in 2.1b2
288 --------------------
289
290 Added the missing wxWindow.GetUpdateRegion() method.
291
292 Made a new change in SWIG (update your patches everybody) that
293 provides a fix for global shadow objects that get an exception in
294 their __del__ when their extension module has already been deleted.
295 It was only a 1 line change in .../SWIG/Modules/pycpp.cxx at about
296 line 496 if you want to do it by hand.
297
298 It is now possible to run through MainLoop more than once in any one
299 process. The cleanup that used to happen as MainLoop completed (and
300 prevented it from running again) has been delayed until the wxc module
301 is being unloaded by Python.
302
303 I fixed a bunch of stuff in the C++ version of wxGrid so it wouldn't
304 make wxPython look bad.
305
306 wxWindow.PopupMenu() now takes a wxPoint instead of x,y. Added
307 wxWindow.PopupMenuXY to be consistent with some other methods.
308
309 Added wxGrid.SetEditInPlace and wxGrid.GetEditInPlace.
310
311 You can now provide your own app.MainLoop method. See
312 wxPython/demo/demoMainLoop.py for an example and some explaination.
313
314 Got the in-place-edit for the wxTreeCtrl fixed and added some demo
315 code to show how to use it.
316
317 Put the wxIcon constructor back in for GTK as it now has one that
318 matches MSW's.
319
320 Added wxGrid.GetCells
321
322 Added wxSystemSettings static methods as functions with names like
323 wxSystemSettings_GetSystemColour.
324
325 Removed wxPyMenu since using menu callbacks have been depreciated in
326 wxWindows. Use wxMenu and events instead.
327
328 Added alternate wxBitmap constructor (for MSW only) as
329 wxBitmapFromData(data, type, width, height, depth = 1)
330
331 Added a helper function named wxPyTypeCast that can convert shadow
332 objects of one type into shadow objects of another type. (Like doing
333 a down-cast.) See the implementation in wx.py for some docs.
334
335 Fixed wxImage GetData and SetData to properly use String objects for
336 data transfer.
337
338 Added access methods to wxGridEvent.
339
340 New Makefile/Setup files supporting multiple dynamic extension modules
341 for unix systems.
342
343 Fixes for the wxGLCanvas demo to work around a strange bug in gtk.
344
345 SWIG support routines now compiled separately instead of being bundled
346 in wx.cpp.
347
348
349
350
351
352 What's new in 2.1b1
353 --------------------
354 Fixed wxComboBox.SetSelection so that it actually sets the selected
355 item. (Actually just removed it from wxPython and let it default to
356 wxChoice.SetSelection which was already doing the right thing.)
357
358 Added the Printing Framework.
359
360 Switched back to using the wxWindows DLL for the pre-built Win32
361 version. The problem was needing to reinitialize static class info
362 data after loading each extension module.
363
364 Lots of little tweaks and additions to reflect changes to various
365 wxWindows classes.
366
367 Fixed a bug with attaching objects to tree items. Actually was a
368 symptom of a larger problem with not obtaining the interpreter lock
369 when doing any Py_DECREFs.
370
371 wxSizer and friends. Sizers are layout tools that manage a colection
372 of windows and sizers. Different types of sizers apply different
373 types of layout algorithms. You saw it here first! These classes are
374 not even in the wxWindows C++ library yet!
375
376
377
378 What's new in 2.0b9
379 -------------------
380 Bug fix for ListCtrl in test4.py (Was a missing file... DSM!)
381
382 Bug fix for occassional GPF on Win32 systems upon termination of a
383 wxPython application.
384
385 Added wxListBox.GetSelections returning selections as a Tuple.
386
387 Added a wxTreeItemData that is able to hold any Python object and be
388 associated with items in a wxTreeCtrl. Added test pytree.py to show
389 this feature off.
390
391 Added wxSafeYield function.
392
393 OpenGL Canvas can be optionally compiled in to wxPython.
394
395 Awesome new Demo Framework for showing off wxPython and for learning
396 how it all works.
397
398 The pre-built Win32 version is no longer distributing the wxWindows
399 DLL. It is statically linked with the wxWindows library instead.
400
401 Added a couple missing items from the docs.
402
403 Added wxImage, wxImageHandler, wxPNGHandler, wxJPEGHandler,
404 wxGIFHandler and wxBMPHandler.
405
406 Added new methods to wxTextCtrl.
407
408 Fixed some problems with how SWIG was wrapping some wxTreeCtrl
409 methods.
410
411
412
413 What's new in 2.0b8
414 -------------------
415 Support for using Python threads in wxPython apps.
416
417 Several missing methods from various classes.
418
419 Various bug fixes.
420
421
422
423 What's new in 2.0b7
424 -------------------
425 Added DLG_PNT and DLG_SZE convienience methods to wxWindow class.
426
427 Added missing constructor and other methods for wxMenuItem.
428
429
430
431 What's new in 2.0b6
432 -------------------
433 Just a quickie update to fix the self-installer to be compatible with
434 Python 1.5.2b2's Registry settings.
435
436
437 What's new in 2.0b5
438 -------------------
439 Well obviously the numbering scheme has changed. I did this to
440 reflect the fact that this truly is the second major revision of
441 wxPython, (well the third actually if you count the one I did for
442 wxWindows 1.68 and then threw away...) and also that it is associated
443 with the 2.0 version of wxWindows.
444
445 I have finally started documenting wxPython. There are several pages
446 in the wxWindows documentation tree specifically about wxPython, and I
447 have added notes within the class references about where and how wxPython
448 diverges from wxWindows.
449
450 Added wxWindow_FromHWND(hWnd) for wxMSW to construct a wxWindow from a
451 window handle. If you can get the window handle into the python code,
452 it should just work... More news on this later.
453
454 Added wxImageList, wxToolTip.
455
456 Re-enabled wxConfig.DeleteAll() since it is reportedly fixed for the
457 wxRegConfig class.
458
459 As usual, some bug fixes, tweaks, etc.
460
461
462
463 What's new in 0.5.3
464 -------------------
465 Added wxSashWindow, wxSashEvent, wxLayoutAlgorithm, etc.
466
467 Various cleanup, tweaks, minor additions, etc. to maintain
468 compatibility with the current wxWindows.
469
470
471
472 What's new in 0.5.0
473 -------------------
474 Changed the import semantics from "from wxPython import *" to "from
475 wxPython.wx import *" This is for people who are worried about
476 namespace pollution, they can use "from wxPython import wx" and then
477 prefix all the wxPython identifiers with "wx."
478
479 Added wxTaskbarIcon for wxMSW.
480
481 Made the events work for wxGrid.
482
483 Added wxConfig.
484
485 Added wxMiniFrame for wxGTK.
486
487 Changed many of the args and return values that were pointers to gdi
488 objects to references to reflect changes in the wxWindows API.
489
490 Other assorted fixes and additions.
491
492
493
494
495 What's new in 0.4.2
496 -------------------
497
498 wxPython on wxGTK works!!! Both dynamic and static on Linux and
499 static on Solaris have been tested. Many thanks go to Harm
500 <H.v.d.Heijden@phys.tue.nl> for his astute detective work on tracking
501 down a nasty DECREF bug. Okay so I have to confess that it was just a
502 DSM (Dumb Stupid Mistake) on my part but it was nasty none the less
503 because the behavior was so different on different platforms.
504
505 The dynamicly loaded module on Solaris is still segfaulting, so it
506 must have been a different issue all along...
507
508
509
510 What's New in 0.4
511 -----------------
512
513 1. Worked on wxGTK compatibility. It is partially working. On a
514 Solaris/Sparc box wxPython is working but only when it is statically
515 linked with the Python interpreter. When built as a dyamically loaded
516 extension module, things start acting weirdly and it soon seg-faults.
517 And on Linux both the statically linked and the dynamically linked
518 version segfault shortly after starting up.
519
520 2. Added Toolbar, StatusBar and SplitterWindow classes.
521
522 3. Varioius bug fixes, enhancements, etc.
523
524 ----------------------------------------------------------------------
525
526
527
528 Build Instructions
529 ------------------
530 I used SWIG (http://www.swig.org) to create the source code for the
531 extension module. This enabled me to only have to deal with a small
532 amount of code and only have to bother with the exceptional issues.
533 SWIG takes care of the rest and generates all the repetative code for
534 me. You don't need SWIG to build the extension module as all the
535 generated C++ code is included under the src directory.
536
537 I added a few minor features to SWIG to control some of the code
538 generation. If you want to play around with this you will need to get
539 a recent version of SWIG from their CVS or from a daily build. See
540 http://www.swig.org/ for details.
541
542 wxPython is organized as a Python package. This means that the
543 directory containing the results of the build process should be a
544 subdirectory of a directory on the PYTHONPATH. (And preferably should
545 be named wxPython.) You can control where the build process will dump
546 wxPython by setting the TARGETDIR variable for the build utility, (see
547 below.)
548
549
550 1. Build wxWindows as described in its BuildCVS.txt file. For *nix
551 systems I run configure with these flags:
552
553 --with-gtk
554 --with-libjpeg
555 --without-odbc
556 --enable-unicode=no
557 --enable-threads=yes
558 --enable-socket=yes
559 --enable-static=no
560 --enable-shared=yes
561 --disable-std_iostreams
562
563 You can use whatever flags you want, but I know these work.
564
565 For Win32 systems I use Visual C++ 6.0, but 5.0 should work. The
566 build utility currently does not support any other win32 compilers.
567
568 2. At this point you may want to make an alias or symlink, script,
569 batch file, whatever on the PATH that invokes
570 $(WXWIN)/utils/wxPython/distrib/build.py to help simplify matters
571 somewhat. For example, on my win32 system I have a file named
572 build.bat in a directory on the PATH that contains:
573
574 python $(WXWIN)/utils/wxPython/distrib/build.py %1 %2 %3 %4 %5 %6
575
576
577 3. Change into the $(WXWIN)/utils/wxPython/src directory.
578
579 4. Type "build -b" to build wxPython and "build -i" to install it.
580
581 The build.py script actually generates a Makefile based on what it
582 finds on your system and information found in the build.cfg file.
583 If you have troubles building or you want it built or installed in
584 a different way, take a look at the docstring in build.py. You may
585 be able to override configuration options in a file named
586 build.local.
587
588 5. To build and install the add-on modules, change to the appropriate
589 directory under $(WXWIN)/utils/wxPython/modules and run the build
590 utility again.
591
592 6. Change to the $(WXWIN)/utils/wxPython/demo directory.
593
594 7. Try executing the demo program. For example:
595
596 python demo.py
597
598 To run it without requiring a console on win32, you can use the
599 pythonw.exe version of Python either from the command line or from a
600 shortcut.
601
602
603
604 ----------------
605 Robin Dunn
606 robin@alldunn.com
607
608
609
610
611
612
613