wx.Grid

Plattformunabhängige GUIs mit wxWidgets.
Antworten
mechanicalStore
User
Beiträge: 142
Registriert: Dienstag 29. Dezember 2009, 00:09

Wieso "expandiert" das Grid nicht so, wie der zweite Button?

Code: Alles auswählen

#!/usr/bin/env python3
import wx
import wx.grid


def main():
  
    app = wx.App()

    frame = wx.Frame(None, wx.ID_ANY, "")
    frame.SetSize(650,300)
    frame.SetTitle("frame")

    panel = wx.Panel(frame, wx.ID_ANY)
    sizer = wx.BoxSizer(wx.VERTICAL)

    sizer.Add(wx.Button(panel, -1, 'Fixed Button'), 0, wx.ALIGN_CENTER, 0)
    sizer.Add(wx.Button(panel, -1, 'Expanded Button'), 0, wx.EXPAND, 0)   

    grid1 = wx.grid.Grid(panel, wx.ID_ANY, size = (200,100))
    grid1.CreateGrid(10,5)
    sizer.Add(grid1, 1, wx.EXPAND, 0)

    sizer.SetSizeHints(panel)
    panel.SetSizer(sizer)
    frame.Layout()

    frame.Show()
    app.SetTopWindow(frame)
    app.MainLoop()


if __name__ == "__main__":
    main()
Gibt es keine Möglichkeit, dass die ganze Breite ausgefüllt wird, indem die Spaltenbreite proportional angepasst wird?
heiner88
User
Beiträge: 65
Registriert: Donnerstag 20. Oktober 2016, 07:29

Zum Beispiel mit dem Event: EVT_SIZE

Code: Alles auswählen

#!/usr/bin/env python3
import wx
import wx.grid

numcol = 5
grid1  = None

def OnSize(event):
    width  = grid1.GetClientSize().GetWidth() - grid1.GetRowLabelSize()
    for col in range(numcol):
        grid1.SetColSize(col, width // numcol)

def main():
    global grid1
    app = wx.App()

    frame = wx.Frame(None, wx.ID_ANY, "")
    frame.SetSize(650,300)
    frame.SetTitle("frame")

    panel = wx.Panel(frame, wx.ID_ANY)
    sizer = wx.BoxSizer(wx.VERTICAL)

    sizer.Add(wx.Button(panel, -1, 'Fixed Button'), 0, wx.ALIGN_CENTER, 0)
    sizer.Add(wx.Button(panel, -1, 'Expanded Button'), 0, wx.EXPAND, 0)

    grid1 = wx.grid.Grid(panel, wx.ID_ANY)
    grid1.CreateGrid(10, numcol)
    grid1.Bind(wx.EVT_SIZE, OnSize)
    sizer.Add(grid1, -1, wx.EXPAND, 0)

    sizer.SetSizeHints(panel)
    panel.SetSizer(sizer)
    frame.Layout()

    frame.Show()
    app.SetTopWindow(frame)
    app.MainLoop()


if __name__ == "__main__":
    main()
    
Antworten