Alexis Collange wrote:
Hi,
It seems that the wxWindow.FindWindowById method behavior has changed.
According
to the documentation of “Classic” :
- FindWindowById(self,
winid)*
Find a child of this window
by window ID
In Phoenix FindWindowById is a static method and the search is recursive starting from top level window if the ‘parent’ parameter is not given.
This
new logic is unexpected for me, and I already see an issue into XRC module with the XRCCTRL function.
def XRCCTRL(window, str_id, *ignoreargs):
- Returns the child window associated with the string ID in an XML resource.*
- return window.FindWindowById(XRCID(str_id))*
The
ID search should be relative to the given ‘window’, so according to the
new FindWindowById behavior, the return should be :
- return window.FindWindowById(XRCID(str_id), window)*
Why this change? Search relative to the window instance seems more logic…
As described in the overloads section of the Migration Guide, this is a case of removing the old renames that were done only because of C++ method overloading, which are not needed any longer. (IOW, one of the “dehackifications” done for Phoenix.)
We now have the following. These two recursively search self and its children:
(non-static) wx.Window.FindWindow(self, id)
(non-static) wx.Window.FindWindow(self, name)
These search either all windows in the application, or the tree rooted at parent:
(static) wx.Window.FindWindowById(id, parent=None)
(static) wx.Window.FindWindowByLabel(label, parent=None)
(static) wx.Window.FindWindowByName(name, parent=None)
Due to the renaming of overloads in Classic, and also some additions made later in wxWidgets that conflicted with those renames, the following module-level functions were added, and have been carried over to Phoenix for compatibility:
wx.FindWindowById(id, parent=None)
wx.FindWindowByLabel(label, parent=None)
wx.FindWindowByName(name, parent=None)
I’ll fix XRCCTRL and a few other instances that I see.
Thanks for reporting this.
···
–
Robin Dunn
Software Craftsman
http://wxPython.org