Я хотел использовать списки, созданные элементами wx.BoxSizer, чтобы сделать мой код более читабельным и легким в управлении, но по какой-то причине wx python не может использовать этот вид списков.
Итак, здесь я написал код, который хорошо работает без использования списков:
import wx
class MyPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
vsizer = wx.BoxSizer(wx.VERTICAL)
hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
hsizer2 = wx.BoxSizer(wx.HORIZONTAL)
hsizer3 = wx.BoxSizer(wx.HORIZONTAL)
ts = [wx.StaticText(self, -1, str(i)) for i in range(3)]
ct = [wx.TextCtrl(self, -1) for i in range(3)]
hsizer1.Add(ts[0], 1, wx.EXPAND)
hsizer2.Add(ts[1], 1, wx.EXPAND)
hsizer3.Add(ts[2], 1, wx.EXPAND)
hsizer1.Add(ct[0], 1, wx.EXPAND)
hsizer2.Add(ct[1], 1, wx.EXPAND)
hsizer3.Add(ct[2], 1, wx.EXPAND)
vsizer.Add(hsizer1, 1, wx.ALIGN_CENTER)
vsizer.Add(hsizer2, 1, wx.ALIGN_CENTER)
vsizer.Add(hsizer3, 1, wx.ALIGN_CENTER)
self.SetSizer(vsizer)
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
MyPanel(self)
self.Layout()
self.Show()
app = wx.App()
frame = MyFrame(None)
app.MainLoop()
С помощью этого кода вы получите желаемый макет. Но если я использую списки и циклы, все идет не так, как надо:
import wx
class MyPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
vsizer = wx.BoxSizer(wx.VERTICAL)
hsizer1 = [wx.BoxSizer(wx.HORIZONTAL)]*3
ts = [wx.StaticText(self, -1, str(i)) for i in range(3)]
ct = [wx.TextCtrl(self, -1) for i in range(3)]
for i in range(3):
hsizer1[i].Add(ts[i], 1, wx.EXPAND)
hsizer1[i].Add(ct[i], 1, wx.EXPAND)
for i in hsizer1:
vsizer.Add(i, 1, wx.ALIGN_CENTER)
self.SetSizer(vsizer)
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
MyPanel(self)
self.Layout()
self.Show()
app = wx.App()
frame = MyFrame(None)
app.MainLoop()
Как вы можете видеть, они должны выдавать тот же результат, но это не так. Мой вопрос: почему списки не могут быть использованы в этом случае?