最近在学习使用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的下方了
当然这个方法暂时能解决嵌套布局的一个问题,如果有其他更好的方法也希望能与大家进行交流