级别:初级
我最近开始使用 wxPython 编写 GUI 应用程序。我在创建可滚动面板时遇到问题。我已经有了一个工作正常的 wx.Frame
。我的图形用户界面中有 2 个面板。 (此时请忽略 panel-3)我想让我的 panel-2 可滚动,以便它可以包含更多元素。我的 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))
目前,当我执行我的代码时,我得到的面板 2 只有 7 个按钮,而不是 8 个。我希望第 8 个按钮会创建滚动条,因为它不适合面板 2 的尺寸。 任何人都可以建议什么可能是我的问题的可能解决方案,或者我是否遗漏了什么?
感谢您的宝贵时间& PS:有个类似的问题here但没有得到答复。
完整的代码可以在下面找到:
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()
最佳答案
您可以在滚动面板中添加一个 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()
关于python - 在 wxPython 中创建一个滚动面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21377946/