Seite 1 von 1

Einträge in wx.GridSizer dynamisch ändern

Verfasst: Mittwoch 30. Dezember 2009, 17:37
von darkG0D
Hallo,

ich möchte die Anzahl der Einträge in einem wx.GridSizer dynamisch ändern. Leider weiß ich nicht, wie dies zu bewerkstelligen ist. Z. B. soll im Folgenden Code beim Drücken der Schaltfläche "1" die Anzahl der Einträge von 80 auf z.B. 30 verringert werden.

Danke schon einmal.

Code: Alles auswählen

import wx
import wx.lib.buttons

class MyFrame(wx.Frame):
    """make a frame, inherits wx.Frame"""
    def __init__(self):
        
        wx.Frame.__init__(self, None, wx.ID_ANY, 'wxButton', size=(500,500))
        self.SetBackgroundColour("lightgrey")

        vSizer = wx.BoxSizer(wx.VERTICAL)
        
        sb = wx.StaticBox(self, -1, '')
        
        hSizer1 = wx.StaticBoxSizer(sb, wx.HORIZONTAL)
        self.hGridSizer = wx.GridSizer(10, 8, 1, 1)

        hSizer2 = wx.Gauge(self, -1, 100, size = (0,12))
        
        self.b = []
        
        for i in range(0,10*8):
            self.b.append([])
            self.b[i] = wx.lib.buttons.GenToggleButton(self,-1,str(i), style=wx.NO_BORDER | wx.EXPAND)
            self.hGridSizer.Add(self.b[i], 0, wx.EXPAND)        
            
        hSizer3 = wx.BoxSizer(wx.HORIZONTAL)
        btnCfg = wx.Button(self, -1, '1')
        btnGo = wx.Button(self, -1, '2')
        btnDone = wx.Button(self, -1, '3')
        empty = wx.StaticText(self, -1, '    ')
        hSizer3.Add(btnCfg)
        hSizer3.Add(empty)
        hSizer3.Add(btnGo)
        hSizer3.Add(btnDone)
        
        hSizer1.Add(self.hGridSizer, wx.EXPAND)
        vSizer.Add(hSizer1, flag = wx.ALL | wx.BORDER | wx.EXPAND, border = 5)
        vSizer.Add(hSizer2, flag = wx.ALL | wx.BORDER | wx.EXPAND, border = 10 )
        vSizer.Add(hSizer3, flag = wx.ALIGN_CENTER_HORIZONTAL | wx.ALL | wx.BORDER, border = 5 )
        
        self.SetSizer(vSizer, wx.EXPAND)
        self.Fit()
        self.SetMinSize(self.GetSize())
        
        btnCfg.Bind(wx.EVT_LEFT_DOWN, self.NewOrder)
        
        self.Show(True)
    
    def NewOrder(self,event):
        self.hGridSizer.SetCols(3)
        #self.hGridSizer.Destroy()
        #self.hGridSizer = wx.GridSizer(5,3)
        self.SetMinSize((0,0))
        self.Fit()
        self.SetMinSize(self.GetSize())
        self.b[0].SetLabel('new')

application = wx.PySimpleApp()

# call class MyFrame
window = MyFrame()

# start the event loop
application.MainLoop()

Lösungsvorschlag

Verfasst: Donnerstag 31. Dezember 2009, 13:37
von darkG0D
Habe eine Lösung gefunden, bei welcher der exisiterende GridSizer gelöscht werden muss und durch einen neuen ersetzt wird:

Code: Alles auswählen

import wx
import wx.lib.buttons

class MyFrame(wx.Frame):
    """make a frame, inherits wx.Frame"""
    def __init__(self):
        
        wx.Frame.__init__(self, None, wx.ID_ANY, 'wxButton', size=(500,500))
        self.SetBackgroundColour("lightgrey")

        vSizer = wx.BoxSizer(wx.VERTICAL)
        
        sb = wx.StaticBox(self, -1, '')
        
        self.hSizer1 = wx.StaticBoxSizer(sb, wx.HORIZONTAL)
        self.hGridSizer = wx.GridSizer(10, 8, 1, 1)

        hSizer2 = wx.Gauge(self, -1, 100, size = (0,12))
        
        self.b = []
        
        for i in range(0,10*8):
            self.b.append([])
            self.b[i] = wx.lib.buttons.GenToggleButton(self,-1,str(i), style=wx.NO_BORDER | wx.EXPAND)
            self.hGridSizer.Add(self.b[i], 0, wx.EXPAND)        
            
        hSizer3 = wx.BoxSizer(wx.HORIZONTAL)
        btnCfg = wx.Button(self, -1, '1')
        btnGo = wx.Button(self, -1, '2')
        btnDone = wx.Button(self, -1, '3')
        empty = wx.StaticText(self, -1, '    ')
        hSizer3.Add(btnCfg)
        hSizer3.Add(empty)
        hSizer3.Add(btnGo)
        hSizer3.Add(btnDone)
        
        self.hSizer1.Add(self.hGridSizer, wx.EXPAND)
        vSizer.Add(self.hSizer1, flag = wx.ALL | wx.BORDER | wx.EXPAND, border = 5)
        vSizer.Add(hSizer2, flag = wx.ALL | wx.BORDER | wx.EXPAND, border = 10 )
        vSizer.Add(hSizer3, flag = wx.ALIGN_CENTER_HORIZONTAL | wx.ALL | wx.BORDER, border = 5 )
        
        self.SetSizer(vSizer, wx.EXPAND)
        self.Fit()
        self.SetMinSize(self.GetSize())
        
        btnCfg.Bind(wx.EVT_LEFT_DOWN, self.NewOrder)
        
        self.Show(True)
    
    def NewOrder(self,event):
        self.hGridSizer.Clear(True)
        self.hSizer1.Clear()
        self.hGridSizer = wx.GridSizer(5, 6, 1, 1)
         
        del self.b
        self.b = []
        
        for i in range(0,5*6):
            self.b.append([])
            self.b[i] = wx.lib.buttons.GenToggleButton(self,-1,str(i), style=wx.NO_BORDER | wx.EXPAND)
            self.hGridSizer.Add(self.b[i], 0, wx.EXPAND)                
                
        self.hSizer1.Add(self.hGridSizer, wx.EXPAND)
        self.SetMinSize((0,0))

        self.Fit()
        self.SetMinSize(self.GetSize())

application = wx.PySimpleApp()

# call class MyFrame
window = MyFrame()

# start the event loop
application.MainLoop()