Sì ma... lo stesso, io prima proverei con qualsiasi altro strumento... per esempio, se ho capito più o meno quello che vuoi fare, ho idea che un GridSizer basterebbe tranquillamente a distribuire le scritte dove vuoi tu... o magari qualche cosa di più "sofisticato", ma senza andare a calcolarti a mano tutte le posizioni...
Per esempio, qualcosa del genere:
import wx
class MyBoard(wx.Panel):
def __init__(self, *a, **k):
wx.Panel.__init__(self, *a, **k)
self.SetBackgroundColour(wx.YELLOW)
# per esempio, 10 "slot" da riempire
self.slots = []
for i in range(10):
self.slots.append(wx.StaticText(self, -1, '----'))
# per esempio, ne mettiamo 5 a destra e 5 a sinistra
s = wx.GridSizer(5, 2, 5, 5)
for n, slot in enumerate(self.slots):
fag = wx.ALIGN_RIGHT if n % 2 == 1 else wx.ALIGN_LEFT
s.Add(slot, 0, flag)
self.SetSizer(s)
self.SendSizeEvent() # forza il ricalcolo delle dimensioni
def SetSlot(self, slot, text):
self.slots[slot].SetLabel(text)
self.SendSizeEvent() # forza il ricalcolo delle dimensioni
class Main(wx.Frame):
def __init__(self, *args, **kw):
wx.Frame.__init__(self, *args, **kw)
p = wx.Panel(self)
self.num = wx.SpinCtrl(p, min=0, max=9, size=(50, -1))
self.txt = wx.TextCtrl(p)
go = wx.Button(p, -1, 'GO')
self.board = MyBoard(p, size=(120, 120))
s = wx.BoxSizer(wx.VERTICAL)
s.Add(self.num)
s.Add(self.txt)
s.Add(go)
s.Add(self.board)
p.SetSizer(s)
go.Bind(wx.EVT_BUTTON, self.on_go)
def on_go(self, evt):
self.board.SetSlot(self.num.GetValue(), self.txt.GetValue())
if __name__ == '__main__':
app = wx.App()
Main(None).Show()
app.MainLoop()l
(Istruzioni per l'uso: metti un numero e un testo qualsiasi, premi il pulsante e vedi la scritta corrispondente sul pannello che cambia. Per cancellare la scritta in una posizione, basta scrivere una stringa vuota)