2016-06-02 3 views
0

Ich möchte ein Programm erstellen, das für immer läuft und alle 10s seine Informationen aktualisiert.Erstellen eines aktualisierbaren tkinter-Fensters ohne Schließen

Die beste Lösung, die ich bekam, war:

while True: 

    Gui= GUI() 
    Gui.after(2000, lambda : Gui.destroy()) 
    Gui.mainloop() 

Aber das führte in dem Fenster zu schließen und schrecklichen Effekt. Hier ist mein Code: Ich möchte die Seite aktualisieren, wenn die JSON-Datei geändert wird und das Fenster nicht geschlossen werden soll.

from tkinter import * 
import json 
import time 

def openfile(): 
    data = [] 
    d={} 
    return_listas = [] 
    with open('test.json', 'r') as f: 
     for line in f: 
      data.append(json.loads(line)) 

     for item in data: 

      d.update(item) 
     f.close() 
     return d 

class GUI(Tk): 
    def __init__(self): 
     self.tk = Tk() 
     self.tk.wm_state('zoomed') 
     self.label = {} 
     self.topFrame = Frame(self.tk) 
     self.topFrame.pack(side=TOP,fill=Y) 
     self.task() 

    def task(self): 
     i = 0 
     list = openfile() 
     for ele in list: 

      if list[ele]=="true": 
       lb = Label(self.topFrame, text=ele+"\n", fg="green",font=("Helvetica", 24)) 
      if list[ele]=="false": 
       lb = Label(self.topFrame, text=ele+"\n", fg="red",font=("Helvetica", 24)) 
      lb.pack(fill=X) 

      self.label[ele] = lb 


     i += 1 

UPDATE ich jetzt Probleme haben, wo ich nicht aktualisierbaren Informationen halten kann, entweder es stapelt sich oder zeigen gar nicht

Antwort

0

Alles, was ich tun muß, ist älter Etiketten löschen

for ele in self.label: 
    self.label[ele].destroy() 
self.label= {} 
1

Sie haben es jedes Mal, nicht gelöscht, sondern nur aktualisieren. Hier ist man GUI Klasse:

class GUI(Tk): 
    def __init__(self): 
     self.tk = Tk() 
     self.tk.wm_state('zoomed') 
     self.topFrame = Frame(self.tk) 
     self.topFrame.pack(side=TOP,fill=Y) 
     self.label = Label(self.topFrame, fg="green",font=("Helvetica", 24))     # This will be the label that is updated 
     self.label.pack(fill=X) 
     self.tk.after(1000, self.task)    # in 1 second it will start the loop 

    def task(self): 
     list = openfile() 
     for ele in list: 

      if list[ele]=="true": 
       self.label.configure(text = ele+"\n", fg = 'green') 
      if list[ele]=="false": 
       self.label.configure(text = ele+"\n", fg = 'red') 

     self.tk.after(1000, self.task)    # in 1 second it will go again 

gui = GUI() 
gui.mainloop() 
+0

dank es funktionierte Ich brauche nur einen Weg, um Informationen zu halten erfrischend schön und nicht darauf stapelt Selbst – Sande