Wie kann ich eine wx.sizer eines wx.panel erweitern, wenn die Platte in einem anderen wx.sizer erweitert wird?
Frage
Ich habe eine wx.Panel, die eine GridBagSizer mit ihm verbunden hat. Diese Platte wird in einem anderen Sizer (BoxSizer) platziert, deren Zusatz hat die Flagge erweitern - was bedeutet, dass das Panel über die gesamte Breite des Sizer nimmt, was toll ist. ... Aber der interne Sizer des Panels füllt nicht die Platte jetzt.
Ich habe versucht, die internen Sizer Flagge auf wx.Expand Einstellung | wx.ALL, wenn ich es Komponenten hinzufügen, aber das hat nicht funktioniert. Jeder weiß, wie die Sizer, um sicherzustellen, die gleiche Breite wie es der Platte bleiben, wenn die Platte erweitert wird?
Edit: Mein Code, der die Platte mit dem GridBagSizer erstellt:
def getNewButton(self, bmp1, bmp2, label):
panel = wx.Panel(self.frame, -1, pos=(0,0), style=wx.BORDER_THEME)
sizer = wx.GridBagSizer(0, 1)
#The button
b = buttons.GenBitmapToggleButton(panel, wx.ID_ANY, None)
self.frame.Bind(wx.EVT_BUTTON, self.OnToggleButton, b)
b.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter)
b.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeave)
mask = wx.Mask(bmp1, wx.BLUE)
bmp1.SetMask(mask)
b.SetBitmapLabel(bmp1)
mask = wx.Mask(bmp2, wx.BLUE)
bmp2.SetMask(mask)
b.SetBitmapSelected(bmp2)
b.SetToggle(False)
b.SetInitialSize(size = wx.Size(30, 30))
b.SetBezelWidth(0)
#The Label Button
l1 = buttons.GenButton(panel, wx.ID_ANY, label, style=wx.BORDER_NONE)
self.frame.Bind(wx.EVT_BUTTON, self.OnFlatButton, l1)
l1.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter)
l1.Bind(wx.EVT_LEAVE_WINDOW, self.OnNonToggleMouseLeave)
sizer.Add(b, wx.GBPosition(0,0))
sizer.Add(l1, wx.GBPosition(0,1), flag=wx.EXPAND)
panel.SetSizer(sizer)
sizer.SetSizeHints(panel)
self.buttonsList.append(ImgToggleButtonComponents(b,panel,l1))
return panel
Lösung
Alles, was Sie hier machen sieht vernünftig. Ich glaube, du verpasst eine AddGrowableCol () -Aufruf.
sizer.Add(b, wx.GBPosition(0,0))
sizer.Add(l1, wx.GBPosition(0,1), flag=wx.EXPAND)
sizer.AddGrowableCol(1)
Ich habe persönlich mehr Glück mit einem FlexGridSizer anstelle einem GridBagSizer habe
fgs = wx.FlexGridSizer(gridRows[fields], 2, 0, 0)
fgs.AddGrowableCol(1)
fgs.Add(wx.StaticText(self, -1, "Contact Phone"), 0, wx.ALL, border)
Andere Tipps
Sie haben die richtige Idee. Wenn Sie einen Code veröffentlichen, (nur einige Platzhalter, mit verschiedenen Hintergrundfarben oder etwas, damit wir sehen, was passiert) wird es leichter zu diagnostizieren sein. Stellen Sie sicher, dass die Eltern Innenverkleidung richtig eingestellt ist, und Sie könnten einige Sizer Hinweise versuchen. Gridbagsizer.SetSizeHints (innerPanel) und sehen, ob das hilft
Eine andere Möglichkeit, dies zu tun ist mit einer Box Sizer:
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(item1)
sizer.Add(item2, proportion=1, flag=wx.EXPAND)
Beide Wege gearbeitet! Danke:)