wxPython. 创建一个包含四个固定大小框的面板
我正在尝试创建一个面板,里面有四个框,每个框里包含一些数据。这四个框的大小应该是固定的,不会改变。目前我做的四个框有些重叠在一起。
有没有什么好的建议?
代码:
import wx
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.pl = wx.Panel(self)
self.SetSize((500, 350))
sb = wx.StaticBox(self.pl, -1, 'BOX0', size=(180, 150))
sat = wx.CheckBox(self.pl, -1, 'Satellite')
gsm = wx.CheckBox(self.pl, -1, 'GSM')
wlan = wx.CheckBox(self.pl, -1, 'WLAN')
sb2 = wx.StaticBox(self.pl, -1, 'BOX1', size=(180, 150))
nm2 = wx.StaticText(self.pl, -1, 'default1')
sb3 = wx.StaticBox(self.pl, -1, 'BOX2', size=(180, 150))
nm3 = wx.StaticText(self.pl, -1, 'default2')
sb4 = wx.StaticBox(self.pl, -1, 'BOX3', size=(180, 150))
nm4 = wx.StaticText(self.pl, -1, 'default3')
box = wx.StaticBoxSizer(sb, wx.VERTICAL)
box.Add(sat, 0, wx.ALL, 5)
box.Add(gsm, 0, wx.ALL, 5)
box.Add(wlan, 0, wx.ALL, 5)
box2 = wx.StaticBoxSizer(sb2)
box2.Add(nm2, 0, wx.ALL, 5)
box3 = wx.StaticBoxSizer(sb3)
box3.Add(nm3, 0, wx.ALL, 5)
box4 = wx.StaticBoxSizer(sb4)
box4.Add(nm4, 0, wx.ALL, 5)
gs = wx.BoxSizer(wx.HORIZONTAL)
gs.Add(box)
gs.Add(box2)
gss = wx.BoxSizer(wx.HORIZONTAL)
gss.Add(box3)
gss.Add(box4)
gt = wx.BoxSizer(wx.VERTICAL)
gt.Add(gs)
gt.Add(gss)
self.pl.SetSizer(gt)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, '08_gridsizer.py')
frame.Show()
self.SetTopWindow(frame)
return 1
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()
1 个回答
1
我来回答我自己的问题。
解决办法是给每个 wx.StaticBoxSizer() 加上 wx.Sizer.SetMinSize(),像这样。
sb = wx.StaticBox(self.pl, -1, 'BOX0')
sat = wx.CheckBox(self.pl, -1, 'Satellite')
gsm = wx.CheckBox(self.pl, -1, 'GSM')
wlan = wx.CheckBox(self.pl, -1, 'WLAN')
box = wx.StaticBoxSizer(sb, wx.VERTICAL)
box.SetMinSize((180, 150))
box.Add(sat, 0, wx.ALL, 5)
box.Add(gsm, 0, wx.ALL, 5)
box.Add(wlan, 0, wx.ALL, 5)
另外,我把 wx.StaticText() 中的大小参数去掉了。