Как добавить элементы внутри статического поля при использовании Sizer? - PullRequest
6 голосов
/ 29 июля 2011

Я использую wx.Python и у меня есть группа объектов, которые я хочу «обернуть» в статический блок, подобный следующему:

enter image description here

Однако в этом учебнике используются размеры позиций , и вместо этого я использую sizer. Я испытываю трудности с доставкой предметов внутрь:

enter image description here

скорее они находятся ниже статического поля. Как включить объекты в статический блок, используя Sizers, а не position?

Вот мой код:

    # Date and Graph Type Selection 

    self.dateLbl = wx.StaticBox(self, -1, 'Date Range:', size=(240, 140))
    self.dategraphSizer = wx.BoxSizer(wx.VERTICAL)
    self.dategraphSizer.Add(self.dateLbl, 0, wx.ALL|wx.LEFT, 5)

    # Date Range Selection
    self.dateSizer = wx.BoxSizer(wx.HORIZONTAL)
    self.dateone = wx.TextCtrl(self, -1, style=wx.ALIGN_LEFT)
    self.datetwo = wx.TextCtrl(self, -1, style=wx.ALIGN_LEFT)
    self.date2Lbl = wx.StaticText(self, -1, "TO")
    self.dateSizer.Add(self.dateone, 0, wx.ALL|wx.CENTER, 2)
    self.dateSizer.Add(self.date2Lbl, 0, wx.ALL|wx.CENTER, 2)
    self.dateSizer.Add(self.datetwo, 0, wx.ALL|wx.CENTER, 2)


    # Date Quick Selection Buttons
    self.dategraphSizer.Add(self.dateSizer, 0, wx.ALL|wx.CENTER, 5)
    self.todayButton = wx.Button(self, -1, 'Today Only')
    self.dategraphSizer.Add(self.todayButton, 0, wx.ALL|wx.LEFT, 5)
    self.recentButton = wx.Button(self, -1, 'Most Recent Session')
    self.dategraphSizer.Add(self.recentButton, 0, wx.ALL|wx.LEFT, 5)

1 Ответ

13 голосов
/ 29 июля 2011

При использовании Sizer вы должны создать определенный «Sizer статического бокса», который является Sizer и содержит статический ящик, который вы хотите использовать.Это делается с помощью:

self.foo = wx.StaticBoxSizer(self.box, wx.ORIENT)

Это означает, что ваш Static Box должен быть создан заранее и является аргументом, переданным при создании Sizer.С этого момента Sizer ведет себя точно так же, как обычный Sizer.Вот что я получил, исправляя твой код:

    # Date and Graph Type Selection 

    self.dateLbl = wx.StaticBox(self, -1, 'Date Range:', size=(240, 140))
    self.dategraphSizer = wx.StaticBoxSizer(self.dateLbl, wx.VERTICAL)
    #self.dategraphSizer.Add(self.dateLbl, 0, wx.ALL|wx.LEFT, 5) NOTE THIS ISN'T NEEDED ANYMORE

    # Date Range Selection
    self.dateSizer = wx.BoxSizer(wx.HORIZONTAL)
    self.dateone = wx.TextCtrl(self, -1, style=wx.ALIGN_LEFT)
    self.datetwo = wx.TextCtrl(self, -1, style=wx.ALIGN_LEFT)
    self.date2Lbl = wx.StaticText(self, -1, "TO")
    self.dateSizer.Add(self.dateone, 0, wx.ALL|wx.CENTER, 2)
    self.dateSizer.Add(self.date2Lbl, 0, wx.ALL|wx.CENTER, 2)
    self.dateSizer.Add(self.datetwo, 0, wx.ALL|wx.CENTER, 2)


    # Date Quick Selection Buttons
    self.dategraphSizer.Add(self.dateSizer, 0, wx.ALL|wx.CENTER, 5)
    self.todayButton = wx.Button(self, -1, 'Today Only')
    self.dategraphSizer.Add(self.todayButton, 0, wx.ALL|wx.LEFT, 5)
    self.recentButton = wx.Button(self, -1, 'Most Recent Session')
    self.dategraphSizer.Add(self.recentButton, 0, wx.ALL|wx.LEFT, 5)

Что дает такой результат:

enter image description here

...