在GUI面板中滚动?

时间:2009-12-02 09:20:18

标签: wxpython wxwidgets

以下是我的GUI的总体布局:

||Title||||||||||||||||||x|
|                   |words|
|                   |blah |
|  .   .  .   .     |     |
|                   |     |
|    .              |     |
|                   |bttn |
|||||||||||||||||||||||||||

基本上,有两个大窗格,左边根据窗口的大小调整大小,右边保持不变。我想在右侧面板中放置一些交互式小部件,例如复选框,单选按钮等,但我想放入的内容可能大于整个应用程序的大小。如果我想让这个面板在wxPython中滚动(或者等效地,wxWidgets),我该怎么做呢?这是我的猜测:

class MyGUI(wx.Frame):
  def __init__(self)
    wx.Frame(None, -1)
    main_panel = wx.Panel(self,-1)
    main_sizer = wx.BoxSizer(wx.HORIZONTAL)
    main_panel.SetSizer(main_sizer)

    left_panel = wx.Panel(main_panel,-1)
    main_sizer.Add(left_panel, 1, wx.EXPAND)

    right_panel = wx.Panel(main_panel,-1)
    right_sizer = wx.BoxSizer(wx.VERTICAL)
    right_panel.SetSizer(right_sizer)
    main_sizer.Add(right_panel, 0, wx.EXPAND)

    for i in range(100):
      right_sizer.Add(wx.CheckBox(right_panel, -1, "Happy Box"), 0, wx.EXPAND)
    right_sizer.Add(wx.Button(right_panel, -1, "Grow!"),1, wx.EXPAND)

    right_panel.Fit()
    main_panel.Fit()

    self.Layout()
    self.Maximise()
    self.Show()

现在我知道wxPython碰巧有一个叫做ScrolledPanel的漂亮的小面板,但由于某种原因,它似乎并没有真正意识到右侧面板有多大;也就是说,如果我调整GUI的大小,滚动条不能自我纠正。事实上,他们一开始并不是正确的。我怎么理智地去做这个?

1 个答案:

答案 0 :(得分:1)

wxScrolledWindow可能就是你要找的东西。我有很多问题,wxWidgets和小部件动态地改变了大小,但你想要做的可能是调整wxScrolledWindow中的小部件,然后在滚动的窗口上调用FitInside()。