wxPython的。创建一个包含四个静态大小的框的面板

时间:2009-11-23 15:53:22

标签: python 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 个答案:

答案 0 :(得分:1)

我只想回答我自己的问题。

解决方法是将wx.Sizer.SetMinSize()添加到每个wx.StaticBoxSizer()中。

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()

中的size参数