2 Stimmen

wxPython: Wie man die Größe eines Teils eines Grid-Sizers fixiert

Ich möchte 3 Spalten erstellen, die sich erweitern, wenn sich das Fenster erweitert. Aber ich möchte Grenzen zu setzen, so dass die verschiedenen Spalten zu verschiedenen maximalen Beträge erweitern.

Was ich hier getan habe, ist wxGlade verwendet, um einen Rahmen w / ein Grid Sizer zu erstellen, die 1 Zeile und drei Spalten hat. Ich möchte, dass Teil1 eine feste Breite von "A", Teil2 eine feste Breite von "B" und Teil3 in der Lage sein, wie normal zu erweitern.

Wie kann ich das tun?

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# generated by wxGlade 0.6.3 on Tue May 24 11:35:21 2011

import wx

# begin wxGlade: extracode
# end wxGlade

class MyFrame1(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame1.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.panel_1 = wx.Panel(self, -1)
        self.sizer_10_staticbox = wx.StaticBox(self.panel_1, -1, "Part2")
        self.sizer_11_staticbox = wx.StaticBox(self.panel_1, -1, "Part3")
        self.sizer_9_staticbox = wx.StaticBox(self.panel_1, -1, "Part1")

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame1.__set_properties
        self.SetTitle("frame_2")
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame1.__do_layout
        sizer_8 = wx.BoxSizer(wx.VERTICAL)
        grid_sizer_4 = wx.GridSizer(1, 3, 0, 0)
        sizer_11 = wx.StaticBoxSizer(self.sizer_11_staticbox, wx.HORIZONTAL)
        sizer_10 = wx.StaticBoxSizer(self.sizer_10_staticbox, wx.HORIZONTAL)
        sizer_9 = wx.StaticBoxSizer(self.sizer_9_staticbox, wx.HORIZONTAL)
        grid_sizer_4.Add(sizer_9, 1, wx.EXPAND, 0)
        grid_sizer_4.Add(sizer_10, 1, wx.EXPAND, 0)
        grid_sizer_4.Add(sizer_11, 1, wx.EXPAND, 0)
        self.panel_1.SetSizer(grid_sizer_4)
        sizer_8.Add(self.panel_1, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_8)
        sizer_8.Fit(self)
        self.Layout()
        # end wxGlade

# end of class MyFrame1

if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_2 = MyFrame1(None, -1, "")
    app.SetTopWindow(frame_2)
    frame_2.Show()
    app.MainLoop()

1voto

g.d.d.c Punkte 44201

Wenn Sie eine GridSizer Ich würde Ihnen empfehlen, einen Blick auf GridBagSizer stattdessen.

Sobald Sie sich entschieden haben, ob das brauchbar ist, müssen Sie sich wahrscheinlich mit dem sizer.AddGrowableRow(row) y sizer.AddGrowableCol(col) Methoden. Sie ermöglichen es Ihnen, Spalten oder Zeilen im Raster anzugeben, die sich erweitern. Sie verwenden keine Proportionen, wie Sie sie von den BoxSizern kennen (wenn also zwei Spalten wachsen, wachsen sie beide mit der gleichen Rate), aber Sie können einige festlegen, die sich erweitern, und andere, die das nicht tun.

Indizes sind nullbasiert, also würde ich nach Ihrer Beschreibung auf etwas wie gridbagsizer_4.AddGrowableCol(2) aber wie mein Kommentar sagt, machen mich die Namenskonventionen von wxGlade krank und es ist schwer zu sagen, und diese Methoden werden nicht auf dem GridSizer verfügbar sein.

Für alle Interessierten gibt es hier einen Beitrag über meine Klassen für Formularerstellung und Formulardialog: Formular-Ersteller . Es war einfacher, sie auf meiner Website zu veröffentlichen, wo ich Anhänge einfügen konnte, als zu versuchen, alles hier einzufügen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X