WXPython Gridsizer - Umgang mit leeren Zellen
-
27-10-2019 - |
Frage
Ich mache meinen ersten Einstieg in die GUI -Programmierung und versuche mich mit WXPython in den Griff zu bekommen. Ich versuche, WXGlade zu verwenden, aber es stellt sich heraus, dass es ein bisschen fehlerhaft ist.
Ich mache ein Layout mit GridSizer.
Ich habe herausgefunden, dass jedes Mal, wenn Sie dem Sizer etwas hinzufügen, in die nächste Zelle eingebracht wird. Wenn Sie eine leere Zelle haben, müssen Sie sie mit etwas füllen. Habe ich recht?
Dies ist das Layout, das ich entscheide (WXGlade Screenshot):
Das Problem ist, dass ich einen Code generiere, den ich bekomme:
grid_sizer_1 = wx.GridSizer(3, 3, 0, 0)
grid_sizer_1.Add(self.button_last_page, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
grid_sizer_1.Add(self.button_up, 0, wx.ALIGN_BOTTOM|wx.ALIGN_CENTER_HORIZONTAL, 0)
grid_sizer_1.Add(self.button_next_page, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
grid_sizer_1.Add(self.button_left, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL, 0)
grid_sizer_1.Add(self.button_select, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
grid_sizer_1.Add(self.button_right, 0, wx.ALIGN_CENTER_VERTICAL, 0)
grid_sizer_1.Add(self.button_down, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
Scheinbar, weil der "Down" -Button in die 7. Zelle anstelle des 8. eingefügt wird.
Was ist die Standardmethode, um damit umzugehen? Würden Sie eine Art Dummy -Widget einfügen, um die leere Zelle zu füllen? Wenn ja, welches Widget? Oder benutze ich die falsche Art von Sizer?
Vielen Dank!
Lösung
Wie Sie sagten ... funktioniert ein Dummy -Widget (leerer statischer Text) gut. Sie können auch addMany () anstelle von mehreren add () verwenden.
grid_sizer_1 = wx.GridSizer(3, 3, 0, 0)
grid_sizer_1.AddMany( [
(self.button_last_page, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL),
(self.button_up, 0, wx.ALIGN_BOTTOM|wx.ALIGN_CENTER_HORIZONTAL),
(self.button_next_page, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL),
(self.button_left, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL),
(self.button_select, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL),
(self.button_right, 0, wx.ALIGN_CENTER_VERTICAL),
(wx.StaticText(self, -1, ''), 0, wx.EXPAND),
(self.button_down, 0, wx.ALIGN_CENTER_HORIZONTAL) ] )
Andere Tipps
Ich bin mehr mit der Verwendung vertraut (0,0)
Dies bedeutet, dem Sizer eine dehnbare Größe hinzuzufügen. Man würde also ein einzelnes Objekt wie erstellen wie empty_cell = (0,0)
und dann einkleben empty_cell
Überall, wo dieser leere Raum in Ihrem Sizer benötigt wird (wo zum Beispiel der WX.StaticText in der akzeptierten Antwort verwendet wird).