wxpython - 更新 ScrolledPanel 的大小而不滚动到顶部

标签 wxpython wxwidgets

考虑以下虚拟应用程序:

import wx
from wx.lib.scrolledpanel import ScrolledPanel


class MyPanel(ScrolledPanel):
    def __init__(self, parent):
        ScrolledPanel.__init__(self, parent, size=(128, 64))

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(self.sizer)

        self.SetAutoLayout(1)
        self.SetupScrolling(scroll_x=False, scroll_y=True)

    def add_text_line(self, text):
        self.sizer.Add(wx.StaticText(self, label=text))
        self.sizer.Layout()
        self.SetupScrolling(scroll_x=False, scroll_y=True)


class MainWindow(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, title='Test Window')

        self.line_number = 1

        sizer = wx.BoxSizer(wx.VERTICAL)

        button = wx.Button(self, label='Add a row')
        self.Bind(wx.EVT_BUTTON, self.add_row, button)
        sizer.Add(button)

        self.panel = MyPanel(self)
        sizer.Add(self.panel)

        self.SetSizer(sizer)

    def add_row(self, _):
        self.panel.add_text_line('Line number ' + str(self.line_number))
        self.line_number += 1


if __name__ == '__main__':
    app = wx.App(False)
    MainWindow(None).Show()
    app.MainLoop()

它包含一个 ScrolledPanel,当用户按下按钮时,内容会动态添加到其中。 ScrolledPanel 似乎可以正常更新其大小和布局,但是如果我向下滚动列表并按下按钮,则 SetupScrolling 调用会导致滚动位置跳回到顶部。这对于我的应用程序来说是 Not Acceptable 行为。我怎样才能执行以下操作之一?

  1. 布置滚动区域而不跳到顶部

  2. 仅当内容区域实际更改大小时才调用 SetupScrolling

最佳答案

感谢this answer在类似的问题上,我发现我需要调用 FitInside 而不是 SetupScrolling 来更新滚动条。这不会影响滚动位置。

需要修改我的示例代码,将 MyPanel.add_text_line 更改为:

    def add_text_line(self, text):
        self.sizer.Add(wx.StaticText(self, label=text))
        self.sizer.Layout()
        self.FitInside()

关于wxpython - 更新 ScrolledPanel 的大小而不滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22078836/

相关文章:

c++ - 如何在 Windows 上为 Visual Studio 2005 设置 wxwidgets

python - wxCollapsiblePane 强制框架调整大小

python - wxPython图像占用大量内存

python - 如何动态缩小或增长面板内容?

c++ - 如何在wxWidgets中制作 '3 part'分割窗口?

python - 用于查询远程数据库的应用程序的 python gui 工具包的注意事项?

c++ - 由于 SetBackgroundBitmap 导致的内存泄漏

python - wxPython 的 AGW AUI 的优点/缺点是什么?

python - wxPython 中的 "no matching architecture in universal wrapper"问题?

python - 如何在状态栏区域放一个进度条(gauge)并锁定gui大小