Einträge in wx.GridSizer dynamisch ändern

Plattformunabhängige GUIs mit wxWidgets.
Antworten
darkG0D
User
Beiträge: 10
Registriert: Montag 10. April 2006, 19:00

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()
darkG0D
User
Beiträge: 10
Registriert: Montag 10. April 2006, 19:00

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()
Antworten