滚动的面板在wxPython中不起作用

时间:2015-08-26 17:00:18

标签: python wxpython

 class Frame(wx.Frame):
     def __init__(self):
     wx.Frame.__init__(self, None,-1, "SCSM Observatory Log", size=(700, 700))

         panel = wxScrolledPanel.ScrolledPanel(self,-1, size=(800,10000))
         panel.SetupScrolling()

有人可以解释为什么这段代码不起作用?我没有收到任何错误,但它的滚动命令可能没有被初始化?

编辑:滚动工作但我必须调整窗口大小并使其缩小以启用滚动功能。此外,它不会一直滚动到底部。

编辑2:显然滚动条仅滚动到框架的垂直尺寸。因此,如果我将框架y-size设置为1000,它将滚动到1000.唯一的问题是,对于要使用的监视器而言,大的窗口太大。有没有办法强制滚动条移动到大于框架大小的距离?例如,我希望窗口打开,大小为(700,700),但我需要滚动条转到1000.

1 个答案:

答案 0 :(得分:0)

不确定为什么它不适合你,跟随一个适合我的样本。我喜欢使用sizes_controls来处理sizer(在我看来)。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import wx
print(wx.VERSION_STRING)
import wx.lib.sized_controls as SC


class MyCtrl(SC.SizedPanel):
    def __init__(self, parent):
        super(MyCtrl, self).__init__(parent)

        tx1 = wx.TextCtrl(self)
        tx1.SetSizerProps(expand=True, proportion=1)
        tx2 = wx.TextCtrl(self)
        tx2.SetSizerProps(expand=True, proportion=1)


class MyFrame(SC.SizedFrame):
    def __init__(self, parent):
        super(MyFrame, self).__init__(parent,
                                       style=wx.RESIZE_BORDER|wx.DEFAULT_DIALOG_STYLE)

        pane = self.GetContentsPane()
        st = wx.StaticText(pane, label='Text')

        sp = SC.SizedScrolledPanel(pane)
        sp.SetSizerProps(expand=True, proportion=1)
        mc1 = MyCtrl(sp)
        mc2 = MyCtrl(sp)


if __name__ == '__main__':
    import wx.lib.mixins.inspection as WIT
    app = WIT.InspectableApp()
    frame = MyFrame(None)
    frame.Show()
    app.MainLoop()