Merge pull request #1950 from seanbudd/fix-scrolledpanel-tabbing
Some checks are pending
ci-build / build-source-dist (push) Waiting to run
ci-build / build-wheels (x64, macos-13, 3.10) (push) Blocked by required conditions
ci-build / build-wheels (x64, macos-13, 3.11) (push) Blocked by required conditions
ci-build / build-wheels (x64, macos-13, 3.12) (push) Blocked by required conditions
ci-build / build-wheels (x64, macos-13, 3.13) (push) Blocked by required conditions
ci-build / build-wheels (x64, macos-13, 3.9) (push) Blocked by required conditions
ci-build / build-wheels (x64, ubuntu-22.04, 3.10) (push) Blocked by required conditions
ci-build / build-wheels (x64, ubuntu-22.04, 3.11) (push) Blocked by required conditions
ci-build / build-wheels (x64, ubuntu-22.04, 3.12) (push) Blocked by required conditions
ci-build / build-wheels (x64, ubuntu-22.04, 3.13) (push) Blocked by required conditions
ci-build / build-wheels (x64, ubuntu-22.04, 3.9) (push) Blocked by required conditions
ci-build / build-wheels (x64, windows-2022, 3.10) (push) Blocked by required conditions
ci-build / build-wheels (x64, windows-2022, 3.11) (push) Blocked by required conditions
ci-build / build-wheels (x64, windows-2022, 3.12) (push) Blocked by required conditions
ci-build / build-wheels (x64, windows-2022, 3.13) (push) Blocked by required conditions
ci-build / build-wheels (x64, windows-2022, 3.9) (push) Blocked by required conditions
ci-build / build-wheels (x86, windows-2022, 3.10) (push) Blocked by required conditions
ci-build / build-wheels (x86, windows-2022, 3.11) (push) Blocked by required conditions
ci-build / build-wheels (x86, windows-2022, 3.12) (push) Blocked by required conditions
ci-build / build-wheels (x86, windows-2022, 3.13) (push) Blocked by required conditions
ci-build / build-wheels (x86, windows-2022, 3.9) (push) Blocked by required conditions
ci-build / Build wxPython documentation (push) Waiting to run
ci-build / Publish Python distribution to PyPI (push) Blocked by required conditions
ci-build / Create GitHub Release and upload source (push) Blocked by required conditions
ci-build / Upload wheels to snapshot-builds on wxpython.org (push) Blocked by required conditions

Calculate Scroll based on Childs relative position to ScrolledPanel
This commit is contained in:
Scott Talbert
2025-02-26 22:35:21 -05:00
committed by GitHub

View File

@@ -174,6 +174,23 @@ class ScrolledPanel(wx.ScrolledWindow):
evt.Skip()
def GetChildRectRelativeToSelf(self, child: wx.Window):
"""
Same as `child.GetRect()` except the position returned is relative
to this ScrolledPanel rather than the child's parent.
:param wx.Window `child`: any :class:`wx.Window` - derived control.
.. note:: window.GetRect returns the size of a window, and its position
relative to its parent. When calculating ScrollChildIntoView, the
position relative to its parent is not relevant unless the parent
is the ScrolledPanel itself.
"""
cr = child.GetScreenRect()
spp = self.GetScreenPosition()
return wx.Rect(cr.x - spp.x, cr.y - spp.y, cr.width, cr.height)
def ScrollChildIntoView(self, child):
"""
Scroll the panel so that the specified child window is in view.
@@ -188,7 +205,7 @@ class ScrolledPanel(wx.ScrolledWindow):
sppu_x, sppu_y = self.GetScrollPixelsPerUnit()
vs_x, vs_y = self.GetViewStart()
cr = child.GetRect()
cr = self.GetChildRectRelativeToSelf(child)
clntsz = self.GetClientSize()
new_vs_x, new_vs_y = -1, -1