为什么wxpython中的ScrolledPanel不这样工作?

0 投票
1 回答
1582 浏览
提问于 2025-04-16 09:27

我不知道为什么下面的代码不管用,请帮我看看:

import wx
import wx.lib.scrolledpanel as scrolled

class TaskFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, parent = None, id = -1, title="ScrolledPanel", size = (500, 600))
        MainPanel = wx.Panel(self)
        NewPanel = scrolled.ScrolledPanel(parent = MainPanel, pos = (100, 100), size = (300, 200), id = -1, style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER, name="panel" )

        self.Button = wx.Button(parent = NewPanel, id = -1, label="Log", pos=(500, 30), size=(50, 20))
        NewPanel.SetupScrolling()


class TaskApp(wx.App):
    def OnInit(self):
        self.frame = TaskFrame()
        self.frame.Show()
        self.SetTopWindow(self.frame)
        return True

def main():
    App = TaskApp(redirect = False)
    App.MainLoop()

if __name__ == "__main__":
    main()

Log按钮应该放在NewPanel里面,而且NewPanel应该可以滚动,但现在都不行,问题出在哪里呢?

1 个回答

3

试着使用一个大小调整器。根据我的了解,你需要在滚动面板里面放一个比它大的对象,这样才能激活滚动功能。所以这样做应该能实现你想要的效果:

class TaskFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, parent = None, id = -1, title="ScrolledPanel", size = (500, 600))
        MainPanel = wx.Panel(self)
        NewPanel = scrolled.ScrolledPanel(parent = MainPanel, pos = (100, 100), size = (300, 200), id = -1, style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER, name="panel" )

        PanelSizer  = wx.BoxSizer()
        InsidePanel = wx.Panel(NewPanel)
        self.Button = wx.Button(parent=InsidePanel, id = -1, label="Log", pos=(500, 30), size=(50, 20))
        PanelSizer.Add(InsidePanel, proportion=1)

        NewPanel.SetSizer(PanelSizer)
        NewPanel.SetupScrolling()

撰写回答