große Anzahl von Button macht Probleme
Verfasst: Donnerstag 15. Mai 2008, 16:09
Hallo.
Ich habe ein Programm geschrieben welches 16x16 Button verwalten soll.
Mein Problem: Ich muss die Konfiguration der Button z.B. Hintergrundfarbe während der Laufzeit ändern.
Ich habe eine Lösung erarbeitet (auch dank diesem Forum) doch nimmt der Speicherbedarf des Programms bei jeder Aktualisierung der Button zu.
Aber hier erstmal ein bisschen Code:
Buttongenerierung:
Ich erstelle die Button in einer Schleife und speichere den descriptor in der Liste self.b
Jetzt möchte ich die Button "updaten"
Ich dachte so könnte ich den Button zerstören und danach halt mit der selben Methode wie oben wieder mit verändeter Konfiguration erstellen.
Es klappt zwar, aber wenn ich alle 256 Button "update" frisst mein Programm direkt ca. 1Mb mehr Arbeitsspeicher und wird dazu noch langsamer.
Mache ich da irgendwas Falsch? Kann ich auf einen in einer Schleife erstellten Button überhaupt so zugreifen?
Oder gibt es eine andere Möglichkeit die Buttons neu zu konfigurieren.
(Ich möchte nicht alle Button selber von Hand erstellen)
danke im Voraus
Ich habe ein Programm geschrieben welches 16x16 Button verwalten soll.
Mein Problem: Ich muss die Konfiguration der Button z.B. Hintergrundfarbe während der Laufzeit ändern.
Ich habe eine Lösung erarbeitet (auch dank diesem Forum) doch nimmt der Speicherbedarf des Programms bei jeder Aktualisierung der Button zu.
Aber hier erstmal ein bisschen Code:
Buttongenerierung:
Code: Alles auswählen
def createWidgets(self):
if self.y< 1 or self.x<1:
return 0
for i in range( self.y):
for j in range( self.x ):
but = tk.Button(self,
text = " ",
command = lambda x=j,y=i :
self.returnID(x,y))
but.grid(row=i, column = j)
self.b.append( but )
self.L.append(self.b)
Jetzt möchte ich die Button "updaten"
Code: Alles auswählen
def updateWidgets(self,x,y):
ui = x + (y*16)
tk.Grid.grid_remove(self.b[ui])
exchangeValue = returnArray(x, y)
if exchangeValue == 0:
but = tk.Button(self,
text = " ",
command = lambda x=x,y=y :
self.returnID(x,y))
self.b[ui] = but
self.L[ui] = self.b
but.grid(row = y, column = x)
savetoarray(x, y, 0)
else:
but = tk.Button(self,
bg="red",
text = " ",
command = lambda x=x,y=y :
self.returnID(x,y))
self.b[ui] = but
self.L[ui] = self.b
but.grid(row = y, column = x)
savetoarray(x, y, 1)
Es klappt zwar, aber wenn ich alle 256 Button "update" frisst mein Programm direkt ca. 1Mb mehr Arbeitsspeicher und wird dazu noch langsamer.
Mache ich da irgendwas Falsch? Kann ich auf einen in einer Schleife erstellten Button überhaupt so zugreifen?
Oder gibt es eine andere Möglichkeit die Buttons neu zu konfigurieren.
(Ich möchte nicht alle Button selber von Hand erstellen)
danke im Voraus