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):

wxGlade layout screenshot

Das Problem ist, dass ich einen Code generiere, den ich bekomme:

enter image description here

    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!

War es hilfreich?

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top