wxPython需要向StaticBox添加滚动条;这可能吗?

时间:2015-07-29 16:24:28

标签: python scroll wxpython

我见过类似的问题,但没有人帮我解决我的具体问题。

我在wx.Panel上有一堆不同的StaticBox。我动态地将TextField添加到一个特定的StaticBox。如果我添加太多,因为BoxSizer设置为wx.VERTICAL(这是我想要的),Panel扩展到丑陋的外观。是否可以向StaticBox添加滚动条?我找到的唯一可滚动对象是wx.Panel和wx.Window。

The reason I use wx.VERTICAL, a good example

Why I would like to use a scrollbar in staticbox

1 个答案:

答案 0 :(得分:1)

为什么不将StaticBox放入ScrolledPanel?那会很完美。这是一个简单的例子:

import wx
import wx.lib.scrolledpanel as scrolled

########################################################################
class MyPanel(scrolled.ScrolledPanel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        super(MyPanel, self).__init__(parent,
                                      style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER)
        self.SetupScrolling()

        box = wx.StaticBox(self, label="Test Box")
        bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)

        for i in range(15):
            txt = wx.TextCtrl(self)
            bsizer.Add(txt, 0, wx.ALL, 5)

        main_sizer = wx.BoxSizer()
        main_sizer.Add(bsizer, 1, wx.EXPAND)
        self.SetSizer(main_sizer)


########################################################################
class MainFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        super(MainFrame, self).__init__(None, title="Static")
        panel = MyPanel(self)
        self.Show()

if __name__ == '__main__':
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()

您可以使用顶级面板,然后将左侧面板和右侧面板作为子级添加到顶部面板,其中右侧面板将是滚动的面板实例。这将是一种有效的方法。