ich habe da ein kleines Problem mit meinem Python-Programm. Zunächst kurz zur Erklärung was das Programm tut und wie es aufgebaut ist.
Per Telnet verbindet sich das Programm mit einem managed Switch, liest gewisse Parameter aus und soll diese in einer GUI darstellen. Dazu habe ich einen Thread geschrieben, in dem die ganzen Telnet-Aufrufe und Verarbeitung der XML-Files stattfindet. Am Ende des Threads werden Listen mit den gewünschten Parametern in eine Queue geschrieben. Diese Listen können unterschiedlich lang sein, weil z.B. neue Streams während der Laufzeit am Switch an- oder abgemeldet werden und somit mal 5 Streams, mal 8 Streams und mal 1 Stream in der Liste steht.
Diese Listen werden im workerThread in eine Queue gepackt. Über Methode periodCall, innerhalb des workerThreads, wird die Methode processIncoming innerhalb der GUI alle 500ms aufgerufen und geprüft ob es neue Nachrichten in der Queue gibt:
Code: Alles auswählen
def periodicCall(self):
self.gui.processIncoming()
if not self.running:
import sys
sys.exit(1)
self.master.after(500, self.periodicCall)
Code: Alles auswählen
def processIncoming(self):
while self.queue.qsize():
try:
portLst = self.queue.get(0)
self.setPortLabels(self.master, portLst)
self.queue.join()
except Queue.Empty:
pass
Code: Alles auswählen
def setPortLabels(self, master, portLst):
for i in range(len(portLst)):
lblPortNmb = Label(master)
lblPortNmb.config(text="Port " + str(portLst[i].portNumber))
lblPortNmb.grid(row=0, column=i+1)
self.queue.task_done()
Ich vermute, das liegt daran, dass lblPortNmb immer wieder neu erzeugt wird und nicht mehr gelöscht wird. Ich hab es allerdings auch schon mit einer global definierten Liste probiert, sodass ich innerhalb der Methode setPortLabel per
Code: Alles auswählen
Liste.append(Label(master))
Code: Alles auswählen
del Liste[:]
Das einzige, was funktioniert, ist die Label statisch bei der Initialisierung zu erzeugen und in der Methode setPortLabels nur noch den Text zu ändern - dabei gibt es keine Probleme - ist jedoch nicht das, was ich brauche.
Ich hoffe sehr, dass mir jemand sagen kann was ich falsch mache und mir helfen kann.
Vielen Dank schonmal!