wxPython文档记录非常糟糕,理解sizer非常困难,我不得不打印代码并逐一研究它以了解它的作用,以及记住它如何工作的更简单的方法。
看到我来自网络背景,我倾向于将sizer与xhtml div标签进行比较,我将css与标志和wxpython中的标志进行比较,但看到div和css的间隔非常好,诸如此类的,很难跟上wxpython中的所有内容,但我想时间会证明。
就在这里,我正在尝试创建一个带有面板的简单框架,以及一个带有标签和十个像素边框的静态框,带有几个静态文本和一些文本控件。 (wx.TextCtrl)
这就是我的目标。
我想代码不会太多,但是随着父母和旗帜的数量等等,它只会让人感到困惑。
如何添加带填充的静态框,以便它不会碰到面板的两侧(边框),我怎么知道我应该使用哪些sizer?
答案 0 :(得分:3)
这是一个更加可维护的起点。
import wx
class PersonalInfoDialog(wx.Dialog):
def __init__(self, parent):
super(PersonalInfoDialog, self).__init__(parent)
self.SetTitle('Personal Info')
sizer = self.create_controls()
self.SetSizer(sizer)
def create_controls(self):
box = self.create_box()
buttons = self.create_buttons()
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(box, 1, wx.EXPAND | wx.ALL, 10)
sizer.Add(buttons, 0, wx.EXPAND | wx.BOTTOM, 10)
return sizer
def create_box(self):
contents = self.create_box_contents()
box = wx.StaticBox(self, -1, 'Personal Info')
sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
sizer.Add(contents, 1, wx.EXPAND | wx.ALL, 10)
return sizer
def create_box_contents(self):
male = wx.CheckBox(self, -1, 'Male')
married = wx.CheckBox(self, -1, 'Married')
age = self.create_age()
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(male)
sizer.AddSpacer(10)
sizer.Add(married)
sizer.AddSpacer(10)
sizer.Add(age)
return sizer
def create_age(self):
age = wx.SpinCtrl(self, -1, '28', min=0, max=100, size=(64, -1))
sizer = wx.BoxSizer(wx.HORIZONTAL)
text = wx.StaticText(self, -1, 'Age')
sizer.Add(text, 0, wx.ALIGN_CENTER_VERTICAL)
sizer.AddSpacer(10)
sizer.Add(age)
return sizer
def create_buttons(self):
button = wx.Button(self, wx.ID_OK, 'OK')
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.AddStretchSpacer(1)
sizer.Add(button)
sizer.AddStretchSpacer(1)
return sizer
def main():
app = wx.App(False)
dialog = PersonalInfoDialog(None)
dialog.ShowModal()
dialog.Destroy()
app.MainLoop()
if __name__ == '__main__':
main()
答案 1 :(得分:0)
这将基本上创建你想要的东西......可能需要一些小的改动......
import wx
a = wx.App(redirect=False)
f = wx.Frame(None,-1,"application")
p = wx.Panel(f,-1)
sb = wx.StaticBox(p,-1,"label")
sb_sz = wx.StaticBoxSizer(sb,wx.VERTICAL)
sb_sz.Add(wx.CheckBox(p,-1,"CB 1",size=(200,-1)),0,wx.ALL,10)
sb_sz.Add(wx.CheckBox(p,-1,"CB 2"),0,wx.ALL,10)
sb_sz.AddSpacer(7)
sz_h = wx.BoxSizer(wx.HORIZONTAL)
sz_h.Add(wx.StaticText(p,-1,"Some Label"),0,wx.ALL,10)
sz_h.Add(wx.Choice(p,-1,choices = ["A","B","C"]))
sb_sz.Add(sz_h)
sb_sz.AddSpacer(35)
sz = wx.BoxSizer(wx.VERTICAL)
sz.Add(sb_sz,0,wx.ALL,10)
p.SetSizer(sz)
sz_h2 = wx.BoxSizer(wx.HORIZONTAL)
sz_h2.Add(wx.Button(p,wx.ID_OK))
sz_h2.Add(wx.Button(p,wx.ID_CANCEL))
sz.Add(sz_h2,0,wx.ALIGN_RIGHT|wx.ALL,10)
sz2 = wx.BoxSizer()
f.SetSizer(sz2)
sz2.Add(p)
f.Layout()
f.Fit()
f.Show()
a.MainLoop()