
[[ send to:
   wxpython-users@googlegroups.com
   wxpython-dev@googlegroups.com
   wx-users@googlegroups.com
   wx-announce@googlegroups.com
   Python-Announce-List@Python.Org
   ]]



Announcing wxPython 4.0.4
=========================

PyPI:   https://pypi.org/project/wxPython/4.0.4
Extras: https://extras.wxPython.org/wxPython4/extras/
Pip:    ``pip install wxPython==4.0.4``

Changes in this release include the following:

* Fixed an issue where wx.lib.intctrl would erroneously attempt to use
  long on Python3. (#898)

* Include the MSVC runtime DLLs for Python 3.7 builds too.

* Clear LIBPATH_PYEXT and LIB_PYEXT for linux builds too. (#904)

* Added a dependency on the Pillow package since it's used in some
  wx.lib.agw modules. (PR #908)

* Add flag to hide page in wx.lib.agw.aui.notebook. (#895)

* Switch wx.lib.plot to issue deprecation warnings with
  PlotPendingDeprecation so it doesn't have to enable all warnings to
  get them to be shown by default.  (#902)

* Added a Python 3.7 builder on Fedora 28. (#925)

* Fix the object ownership transfer for wx.Menu.Insert() (#931)

* Added wx.Treebook.GetTreeCtrl, wx.Listbook.GetListView and
  wx.Choicebook.GetChoiceCtrl. (#918)

* Removed the wx.BookCtrlBase.RemovePage workaround as it was causing
  problems and doesn't seem to be necessary any more. The existing
  wxWidgets assertions are catching the out of range error just fine,
  however if wxWidgets was built without the debug helpers turned on
  then it could still cause a crash. (#888)

* Reverted the changes which removed the content of the wx.lib.pubsub
  package and encouraged users to switch to the real PyPubSub package
  instead. Removing it caused more issues than were expected so it has
  been restored and the code updated to PyPubSub v3.3.0. Version 4.0.0
  is available upstream, but it is not compatible with Python
  2.7. Now, wx.lib.pubsub is actually deprecated instead of just
  trying to pass control over to the upstream PyPubSub library. (#932)

* Improve calltip stability in pyshell. (#941)

* Fix TypeError in wx.lib.throbber. (#924)

* Fix missing parameter tool_id in
  wx.lib.agw.ribbon.toolbar.RibbonToolBar.AddToggleTool. (#947)

* Add a step to wx.Config.ReadInt to attempt converting from long to
  int under python2. (#384)

* Add virtual behavior for wx.RichTextCtrl and wx.TextCtrl's
  Copy/Cut/Paste methods and their Can* counterparts. (#954)

* Fix IO type in wx.lib.agw.thumbnailctrl (#959)

* Fix type error that would occur using pycolourchooser. (#957)

* Optimize line drawing in HyperTreeList. (#973)

* Add wrapper for wx.StaticBox.GetBordersForSizer and use it in the
  demo to do platform-specific layout of the items in the
  StaticBox. (#974)

* Update wx.Point, wx.RealPoint, and wx.Size to use floating point
  arithmetic when conducting scalar multiplication (#971)

* Fix load/save bugs in PySlices (PR#978)

* Replace deprecated PIL.Image.tostring (PR#1005)

* Fix rendering and mouse sensitivity in UltimateListCtrl when adding
  HyperText items. (#1010)

* Added a parameter to lib.agw.CustomTreeCtrl.SetItemWindow(), to
  allow positioning the Window (a small image) on the left of text in
  a CustomTreeItem. (#PR886).

* Declared DeleteAllPages in the notebook subclasses, so the proper
  C++ implementation will be called. (#972)

* Removed wx.lib.floatbar, which has been deprecated forever and
  probably hasn't been working in nearly as long. (#976)

* Updated SIP to version 4.19.13.

* Fix an issue in wx.lib.agw.aui.AuiManager where the orientation of
  an AuiToolBar would not be updated when calling
  LoadPerspective. (#917)

* Fixed a bug in wx.FileSystemHandler.OpenFile where the object
  ownership was not being transferred correctly, causing a crash after
  a premature object deletion. (#926)

* Fixed wx.ListCtrl.Append when wx.LC_SORT style is used, so appending
  items out of order does not lose the data for the remaining
  columns. (#906)

* Add wx.Accessible, it's Windows-only, will raise a
  NotImplementedError exception on the other platforms. (#958)

* Added the ability to generate stub classes for use when optional
  wxWidgets features are not part of the build. So far, stubs are
  available for wx.Accessible, wx.FileSystemWatcher, wx.glcanvas, 
  wx.media and wx.html2.

* Moved the wxpy_api.h file into the wx package at wx/include/wxPython
  so it will be included in the wheel file. (#961)

* Fixed how string data is added to a virtual file-like object in
  wx.MemoryFSHandler. All strings are now added to the file as utf-8
  encoded data, in both Python2 and Python3, and will be read from the
  virtual file the same way. If you need to use some other encoding
  for some reason you can first convert the text to a bytesarray or
  other buffer protocol compatible object and then create the virtual
  file from that data. (#969)

* Performance update for wx.lib.agw.customtreectrl (#1049)

* Ensure that colours set in wx.lib.agw.customtreectrl.TreeItemAttr
  are instances of wx.Colour. (#1032)

* Fix drawing of ticks in wx.lib.agw.speedmeter when there are
  negative bounds values. (#1013)

* wxWidgets for Mac includes the wxJoystick class now, also update the
  demo.  (#997)

* Fix wx.html.HtmlPrintout to not be seen as an abstract class, so it
  can be instantiated. (#1060)

* Fix wx.aui.AuiNotbook.SetArtProvider to properly transfer ownership
  of the art object from Python to C++. This possible double-deletion
  and related crashing problems. (#1061)

* Fixed the wrappers for wx.html.HtmlWindow.OnOpeningURL to properly
  handle the redirect output parameter. (#1068) This is a
  backwards-incompatible change, please see the Migration Guide for
  details.

* TabNavigatorWindow works similarly to other programs now. It's
  resizable and draggable so if user has tons of files with long names,
  it isn't an irritation anymore plastered right in the middle of the
  screen and can't be worked with easily and ESC now cancels the popup
  with a proper returnId. (#1096)

* Added missing methods in wx.ListBox, SetItemForegroundColour,
  SetItemBackgroundColour and SetItemFont. (#1095)

* Backported a fix in wxWidgets that avoids crashing in hhctrl.ocx
  when using context sensitive help in 64-bit builds on
  Windows. (#1104)






What is wxPython?
-----------------

wxPython is a cross-platform GUI toolkit for the Python programming
language.  It allows Python programmers to create programs with a
robust, highly functional graphical user interface, simply and
easily. It is implemented as a set of Python extension modules that
wrap the GUI components of the popular wxWidgets cross platform
library, which is written in C++. Supported platforms are Microsoft
Windows, Mac OS X and macOS, and Linux or other unix-like systems with
GTK2 or GTK3 libraries. In most cases the native widgets are used on
each platform to provide a 100% native look and feel for the
application.


What is wxPython Phoenix?
-------------------------

wxPython's Project Phoenix is a new from-the-ground-up implementation
of wxPython, created with the intent of making wxPython “better,
stronger, faster than he was before.” In other words, this new
implementation is focused on improving speed, maintainability and
extensibility of wxPython, as well as removing most of the cruft that
had accumulated over the long life of Classic wxPython.

The project has been in development off and on, mostly behind the
scenes, for many years. For the past few years automated snapshot
builds have been available for those adventurous enough to try it, and
many people eventually started using the snapshots in their projects,
even for production releases.  While there are still some things on
the periphery that need to be completed, the core of the new wxPython
extension modules which wrap the wxWidgets code has been stable for a
long time now.

Due to some things being cleaned up, reorganized, simplified and
dehackified wxPython Phoenix is not completely backwards compatible
with wxPython Classic.  This is intended. In general, however, the API
differences tend to be minor and some applications can use Phoenix
with slight, or even with no modifications.  In some other cases the
correct way to do things was also available in Classic and it's only
the wrong way that has been removed from Phoenix.  For more
information there is a Migration Guide document available at:
https://docs.wxpython.org/MigrationGuide.html

The new wxPython API reference documentation, including all
Python-specific additions and customizations, and docs for the wx.lib
package, is located at: https://docs.wxpython.org/

