在wxPython中创建滚动面板

ρss*_*ρss 9 python wxwidgets wxpython

级别:初学者

我最近开始使用wxPython编写GUI应用程序.我在创建可滚动面板时遇到问题.我已经有一个wx.Frame工作正常.我的gui有2个面板.(请暂时忽略面板-3)我想让我的面板2可滚动,以便它可以包含更多元素.我的GUI的基本结构如下:

GUI演示

我已经尝试wx.lib.scrolledpanel.ScrolledPanel()在我的代码中使用但滚动条由于某种原因没有出现.我的代码如下:

panel2 = wx.lib.scrolledpanel.ScrolledPanel(self,-1, size=(600,400), pos=(0,28), style=wx.SIMPLE_BORDER)
panel2.SetupScrolling()
button1 = wx.Button(panel2,label="Button 1",pos=(0,50),size=(50,50))
button2 = wx.Button(panel2,label="Button 2",pos=(0,100), size=(50,50))
button3 = wx.Button(panel2,label="Button 3",pos=(0,150),size=(50,50))
button4 = wx.Button(panel2,label="Button 4",pos=(0,200), size=(50,50))
button5 = wx.Button(panel2,label="Button 5",pos=(0,250),size=(50,50))
button6 = wx.Button(panel2,label="Button 6",pos=(0,300), size=(50,50))
button7 = wx.Button(panel2,label="Button 7",pos=(0,350), size=(50,50))
button8 = wx.Button(panel2,label="Button 8",pos=(0,400), size=(50,50))
Run Code Online (Sandbox Code Playgroud)

目前,当我执行我的代码时,我得到的面板2只有7个按钮而不是8.我希望第8个按钮会创建滚动条,因为它不适合面板2的尺寸.任何人都可以建议什么可能解决我的问题或我错过了什么?

谢谢你的时间和PS:这里有一个类似的问题,但没有回答.

完整的代码可以在下面找到:

import wx
import wx.lib.scrolledpanel

    class GUI(wx.Frame):

        def __init__(self,parent,id,title):
            #First retrieve the screen size of the device
            screenSize = wx.DisplaySize()
            screenWidth = screenSize[0]
            screenHeight = screenSize[1]

            #Create a frame
            wx.Frame.__init__(self,parent,id,title,size=screenSize, style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER)

            panel1 = wx.Panel(self,size=(screenWidth,28), pos=(0,0), style=wx.SIMPLE_BORDER)
            panel1.SetBackgroundColour('#FDDF99')
            panel2 = wx.lib.scrolledpanel.ScrolledPanel(self,-1, size=(screenWidth,400), pos=(0,28), style=wx.SIMPLE_BORDER)
            panel2.SetupScrolling()
            panel2.SetBackgroundColour('#FFFFFF')
            button1 = wx.Button(panel2,label="Button 1",pos=(0,50),size=(50,50))
            button2 = wx.Button(panel2,label="Button 2",pos=(0,100), size=(50,50))
            button3 = wx.Button(panel2,label="Button 3",pos=(0,150),size=(50,50))
            button4 = wx.Button(panel2,label="Button 4",pos=(0,200), size=(50,50))
            button5 = wx.Button(panel2,label="Button 5",pos=(0,250),size=(50,50))
            button6 = wx.Button(panel2,label="Button 6",pos=(0,300), size=(50,50))
            button7 = wx.Button(panel2,label="Button 7",pos=(0,350), size=(50,50))
            button8 = wx.Button(panel2,label="Button 8",pos=(0,400), size=(50,50))


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

Jer*_*y_Y 8

您可以在滚动面板中添加sizer以包含所有按钮.这些代码应该工作:

import wx
import wx.lib.scrolledpanel

class GUI(wx.Frame):

def __init__(self,parent,id,title):
    #First retrieve the screen size of the device
    screenSize = wx.DisplaySize()
    screenWidth = screenSize[0]
    screenHeight = screenSize[1]

    #Create a frame
    wx.Frame.__init__(self,parent,id,title,size=screenSize, style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER)

    panel1 = wx.Panel(self,size=(screenWidth,28), pos=(0,0), style=wx.SIMPLE_BORDER)
    panel1.SetBackgroundColour('#FDDF99')
    panel2 = wx.lib.scrolledpanel.ScrolledPanel(self,-1, size=(screenWidth,400), pos=(0,28), style=wx.SIMPLE_BORDER)
    panel2.SetupScrolling()
    panel2.SetBackgroundColour('#FFFFFF')


    button1 = wx.Button(panel2,label="Button 1",pos=(0,50),size=(50,50))
    button2 = wx.Button(panel2,label="Button 2",pos=(0,100), size=(50,50))
    button3 = wx.Button(panel2,label="Button 3",pos=(0,150),size=(50,50))
    button4 = wx.Button(panel2,label="Button 4",pos=(0,200), size=(50,50))
    button5 = wx.Button(panel2,label="Button 5",pos=(0,250),size=(50,50))
    button6 = wx.Button(panel2,label="Button 6",pos=(0,300), size=(50,50))
    button7 = wx.Button(panel2,label="Button 7",pos=(0,350), size=(50,50))
    button8 = wx.Button(panel2,label="Button 8",pos=(0,400), size=(50,50))



    bSizer = wx.BoxSizer( wx.VERTICAL )
    bSizer.Add( button1, 0, wx.ALL, 5 )
    bSizer.Add( button2, 0, wx.ALL, 5 )
    bSizer.Add( button3, 0, wx.ALL, 5 )
    bSizer.Add( button4, 0, wx.ALL, 5 )
    bSizer.Add( button5, 0, wx.ALL, 5 )
    bSizer.Add( button6, 0, wx.ALL, 5 )
    bSizer.Add( button7, 0, wx.ALL, 5 )
    bSizer.Add( button8, 0, wx.ALL, 5 )
    panel2.SetSizer( bSizer )




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

  • 详细说明(因为@ user3239580打败了它:))你没有得到滚动条的原因是你的滚动面板从未调整到窗口大小.这就是sizer所做的. (3认同)