最近在学习使用wxpython,想通过panel来分出不同的区块来进行单独布局
却发现,当我在panel中嵌套了一个panel,在这个嵌套的panel中使用boxsizer进行布局没有效果
代码如下:
import wx
app = wx.App()
frame = wx.Frame(None,wx.ID_ANY, 'simple.py')
panel = wx.Panel(frame,wx.ID_ANY)
boxsizer = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(boxsizer)
button1 = wx.Button(panel,wx.ID_ANY,'aaaaa')
button2 = wx.Button(panel,wx.ID_ANY,'bbbbb')
boxsizer.Add(button1)
boxsizer.Add(button2)
panel2 = wx.Panel(panel,wx.ID_ANY,style=wx.BORDER_DOUBLE,size = wx.Size(300,300))
panel2.SetBackgroundColour('#00ff00')
boxsizer.Add(panel2)
boxsizer2 = wx.BoxSizer(wx.VERTICAL)
panel2.SetSizer(boxsizer)
button3 = wx.Button(panel2,wx.ID_ANY,'ccccc')
button4 = wx.Button(panel2,wx.ID_ANY,'ddddd')
boxsizer2.Add(button3)
boxsizer2.Add(button4)
frame.Show()
app.MainLoop()
运行结果:
发现按钮 C 覆盖在了按钮 D的上方,如果布局起作用的话,按钮 D 应该在 B 的下方才对
这说明了wxpython在嵌套panel里的布局是没有效果的
但是自己又希望在这个嵌套的panel里有新的布局,该怎么做呢,我想到的办法是使用绝对布局:
import wx
app = wx.App()
frame = wx.Frame(None,wx.ID_ANY, 'simple.py')
panel = wx.Panel(frame,wx.ID_ANY)
boxsizer = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(boxsizer)
button1 = wx.Button(panel,wx.ID_ANY,'aaaaa')
button2 = wx.Button(panel,wx.ID_ANY,'bbbbb')
boxsizer.Add(button1)
boxsizer.Add(button2)
panel2 = wx.Panel(panel,wx.ID_ANY,style=wx.BORDER_DOUBLE,size = wx.Size(300,300))
panel2.SetBackgroundColour('#00ff00')
boxsizer.Add(panel2)
button3 = wx.Button(panel2,wx.ID_ANY,'ccccc')
button4 = wx.Button(panel2,wx.ID_ANY,'ddddd',pos = wx.Point(0,30))
frame.Show()
app.MainLoop()
运行结果如下:
这样 D 按钮就在 C的下方了
当然这个方法暂时能解决嵌套布局的一个问题,如果有其他更好的方法也希望能与大家进行交流