2010-09-23 5 views
1

Ok У меня есть приложение Я кодирования и пытаюсь получить раскладку проще к этому: Sizer Alignment with all the input boxes alignedWxPython GUI BoxSizers

Обратите внимание, как текст выравнивается по левому краю, а поля ввода все выровнены, я вижу это в демонстрационный код wxPython, но все они используют flexgrid sizer, и я стараюсь использовать BoxSizers (из-за их простоты и потому, что я понимаю немного sizers и даже борюсь с использованием BoxSizers, через 6 месяцев у меня будет четный более трудное время)

Я попытался иметь вход и текст в двух вертикальных sizers, а затем поместить их в горизонтальный сизер, не работал, потому что текст не был выровнен с t он вводит. Я также пробовал это сделать, а также каждый текст, входное сопряжение в sizer, еще хуже. Какие-либо предложения?

+3

Мое предложение: вы только ** есть ** чтобы узнать о flexgrid, если вы хотите причудливые макеты, подобные этому, boxsizers просто ** не ** достаточно гибкие, чтобы соответствовать вашим требовательным спецификациям макета. –

+0

Я могу создать любой макет только с BoxSizer. Вам просто нужен один вертикальный BoxSizer и 3 горизонтальных BoxSizer. Вы хотите разместить некоторые проставки, если вам нужно пустое пространство между виджетами, или вы можете просто использовать флаги sizer: mySizer.Add (widget, 0, wx.RIGHT, 10) Это означает, что добавьте 10 пикселей буфер справа. –

ответ

3

Вот простой пример, используя только BoxSizers:

import wx 

class MyForm(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial") 

     # Add a panel so it looks the correct on all platforms 
     panel = wx.Panel(self, wx.ID_ANY) 

     # create the labels 
     lblOne = wx.StaticText(panel, label="labelOne", size=(60,-1)) 
     lblTwo = wx.StaticText(panel, label="lblTwo", size=(60,-1)) 
     lblThree = wx.StaticText(panel, label="lblThree", size=(60,-1)) 

     # create the text controls 
     txtOne = wx.TextCtrl(panel) 
     txtTwo = wx.TextCtrl(panel) 
     txtThree = wx.TextCtrl(panel) 

     # create some sizers 
     mainSizer = wx.BoxSizer(wx.VERTICAL) 
     lineOneSizer = wx.BoxSizer(wx.HORIZONTAL) 
     lineTwoSizer = wx.BoxSizer(wx.HORIZONTAL) 
     lineThreeSizer = wx.BoxSizer(wx.HORIZONTAL) 

     # add widgets to sizers 
     lineOneSizer.Add(lblOne, 0, wx.ALL|wx.ALIGN_LEFT, 5) 
     lineOneSizer.Add(txtOne, 0, wx.ALL, 5) 
     lineTwoSizer.Add(lblTwo, 0, wx.ALL|wx.ALIGN_LEFT, 5) 
     lineTwoSizer.Add(txtTwo, 0, wx.ALL, 5) 
     lineThreeSizer.Add(lblThree, 0, wx.ALL|wx.ALIGN_LEFT, 5) 
     lineThreeSizer.Add(txtThree, 0, wx.ALL, 5) 

     mainSizer.Add(lineOneSizer) 
     mainSizer.Add(lineTwoSizer) 
     mainSizer.Add(lineThreeSizer) 

     panel.SetSizer(mainSizer) 

# Run the program 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyForm() 
    frame.Show() 
    app.MainLoop() 

Но это своего рода грязный, так вот переработан версия:

import wx 

class MyForm(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial") 

     # create the main sizer 
     self.mainSizer = wx.BoxSizer(wx.VERTICAL) 

     # Add a panel so it looks the correct on all platforms 
     self.panel = wx.Panel(self, wx.ID_ANY) 

     lbls = ["labelOne", "lblTwo", "lblThree"] 
     for lbl in lbls: 
      self.buildLayout(lbl) 
     self.panel.SetSizer(self.mainSizer) 

    #---------------------------------------------------------------------- 
    def buildLayout(self, text): 
     """""" 
     lblSize = (60,-1) 
     lbl = wx.StaticText(self.panel, label=text, size=lblSize) 
     txt = wx.TextCtrl(self.panel) 

     sizer = wx.BoxSizer(wx.HORIZONTAL) 
     sizer.Add(lbl, 0, wx.ALL|wx.ALIGN_LEFT, 5) 
     sizer.Add(txt, 0, wx.ALL, 5) 
     self.mainSizer.Add(sizer) 

# Run the program 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyForm() 
    frame.Show() 
    app.MainLoop() 
1

Для большинства макетов, отличных от самых простых, вы, как правило, не можете избежать, используя ряд различных типов sizers, чтобы реализовать ваш дизайн.

Here - хороший учебник по sizers.

+0

Привет @volting, я считаю, что ваша ссылка «Здесь» указывает на эту же страницу ?! Это было предназначено ?! – sdaau

+0

hmmm thats odd, определенно не предназначен ... Ive обновлено ссылкой на учебник – volting

Смежные вопросы