wxWindow.FindWindowById behavior change

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…

Alexis

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

Thank Robin for this complete answer.

(non-static) wx.Window.FindWindow method had escaped my search.

···

Alexis