使滚动面板的水平滚动条在wxPython中永久可见

时间:2014-02-11 13:41:18

标签: wxpython

我正在Windows 8操作系统上使用wxPython v3.0开发GUI。关于特定滚动面板上的水平滚动条,我遇到了问题。在我的GUI中,有两个名为panel1的滚动面板和panel2添加到名为mainPanel的一个主滚动面板中,此面板有一个垂直滚动条。当移动mainPanel的垂直滚动条时,所有面板(panel1& panel2)同时移动,这正是我想要的。同样在panel1中只有一个水平滚动条(使用panel1SetupScrolling(scroll_y=False)上禁用垂直滚动条)。我在panel1上需要水平滚动条的原因是因为如果内部文本增加,面板也会扩展,所以我给它一个滚动条。

问题:

panel1上的水平条仅在我将mainPanel的垂直滚动条(图像中最右侧的滚动条)滚动到底部时才可见。 Image

如何使panel1上的水平滚动条每次都可见?我不想先将mainPanel的垂直滚动条滚动到底部,以便访问panel1的水平滚动条?

代码: 以下是此问题的示例代码。如果您对身份有任何问题,也可以从this link下载python文件。

  #!/usr/bin/env python

  import wx
  import wx.lib.scrolledpanel


  class GUI(wx.Frame):

    def __init__(self, parent, id, title):
    screenWidth = 800
    screenHeight = 450
    screenSize = (screenWidth, screenHeight)
    wx.Frame.__init__(self, None, id, title, size=screenSize)
    locationFont = wx.Font(15, wx.MODERN, wx.NORMAL, wx.BOLD)
    mainSizer = wx.BoxSizer(wx.VERTICAL)
    panelsSizer = wx.BoxSizer(wx.HORIZONTAL)
    sizer1 = wx.BoxSizer(wx.VERTICAL)
    sizer2 = wx.BoxSizer(wx.VERTICAL)
    mainPanel = wx.lib.scrolledpanel.ScrolledPanel(self, -1,style=wx.SIMPLE_BORDER)
    mainPanel.SetupScrolling()
    panel1 = wx.lib.scrolledpanel.ScrolledPanel(mainPanel, -1, style=wx.SIMPLE_BORDER)
    panel1.SetupScrolling(scroll_y=False)
    panel2 = wx.lib.scrolledpanel.ScrolledPanel(mainPanel, -1, style=wx.SIMPLE_BORDER)
    panel1.SetBackgroundColour('#FFFFFF')
    panel2.SetBackgroundColour('#FFFFFF')
    panelsSizer.Add(panel1, 1, wx.EXPAND)
    panelsSizer.Add(panel2, 2, wx.EXPAND)
    mainPanel.SetSizer(panelsSizer)

    k = 0
    locations = [1,2,3,4,5,6,7,8,9,10,110,110,1,2,3,4,5,6,7,8,9,10]
    for i in range(1,20):
        locationPanels = 'locationPanel'+str(k)
        locationPanels = wx.Panel(panel1)
        label0 = str(k+1)+ '. '+'Panel-1   #############################'
        text0 = wx.StaticText(locationPanels, -1, label0)
        text0.SetFont(locationFont)
        text0.SetForegroundColour('#0101DF')
        sizer1.Add(locationPanels, 0, wx.ALL, 5)
        sizer1.Add(wx.StaticLine(panel1), 0, wx.ALL|wx.EXPAND, 0)
        k += 1

    k = 0
    availability=[1,2,3,4,5,6,5,4,3,2,1,2,3,110,1,2,3,4,5,6,7,8,9,10]
    for i in range(1,20):
        sensorPanel ='sensorPanel' +str(k)
        sensorPanel = wx.Panel(panel2)
        label = str(k)+ '. Panel-2'
        text = wx.StaticText(sensorPanel, -1, label)
        text.SetForegroundColour('#0101DF')
        text.SetFont(locationFont)
        sizer2.Add(sensorPanel, 0, wx.ALL, 5)
        sizer2.Add(wx.StaticLine(panel2), 0, wx.ALL|wx.EXPAND, 0)
        k += 1

    panel1.SetSizer(sizer1)
    panel2.SetSizer(sizer2)
    mainSizer.Add(mainPanel, 15, wx.EXPAND|wx.ALL)
    self.SetSizer(mainSizer)


if __name__=='__main__':
app = wx.App()
frame = GUI(parent=None, id=-1, title="Test")
frame.Show()
app.MainLoop()

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

当您调用没有参数的方法SetupScrolling时,如果您不希望y轴滚动条显示使用scroll_y = False,则两个滚动条都将处于活动状态。

panel21 = wx.lib.scrolledpanel.ScrolledPanel(mainPanel, -1, style=wx.SIMPLE_BORDER)
panel21.SetupScrolling(scroll_y = False)