2016-12-09 6 views
-1

Ich möchte eine Python und Tkinter App mit einer Art Tabelle darauf codieren.Python 2.x mit Tkinter Grid Text-Update

Mit Tkinter konnte ich also ein "Excellicke" Blatt mit einigen Zeilen und Spalten erstellen.

Aber jetzt möchte ich die Werte regelmäßig aktualisieren (einmal alle 30 Sekunden). Wenn ich das Raster loop, dann wird das Programm langsamer, je länger es läuft. Ich denke, es ist nicht der beste Weg, um das Raster immer neu zu erstellen.

Also wie kann ein Raster gemacht werden und nur die Werte werden in der Schleife aktualisiert?

+1

Willkommen bei Stack-Überlauf! Bitte gehen Sie durch die [Tour] (http://stackoverflow.com/tour), die [Hilfe-Center] (http://stackoverflow.com/help) und die [wie Sie eine gute Frage stellen] (http: // stackoverflow.com/help/how-to-ask), um zu sehen, wie diese Site funktioniert und um Ihnen zu helfen, Ihre aktuellen und zukünftigen Fragen zu verbessern, die Ihnen helfen können, bessere Antworten zu erhalten. –

+0

zeigen Sie uns den Code, es ist nicht genug, um das Problem in Worten zu beschreiben, da es uns nichts zu arbeiten von Ihnen hilft. –

Antwort

0

Die Antwort auf Ihre Frage ist so ziemlich das, was Sie geschrieben haben: Erstellen Sie die Widgets einmal und erstellen Sie dann eine Schleife, um die Werte in regelmäßigen Abständen zu aktualisieren.

Hier ist ein Beispiel:

import Tkinter as tk 
import random 

class Table(tk.Frame): 
    def __init__(self, parent, rows=10, columns=10): 
     tk.Frame.__init__(self, parent) 
     self.rows = rows 
     self.columns = columns 
     self.widgets = [] 
     for r in range(rows): 
      row = [] 
      self.widgets.append(row) 
      for c in range(columns): 
       cell = tk.Label(self) 
       cell.grid(row=r, column=c, sticky="nsew") 
       row.append(cell) 

     for r in range(rows): 
      self.grid_rowconfigure(r, weight=1) 

     for c in range(columns): 
      self.grid_columnconfigure(c, weight=1) 

     self.refresh() 

    def refresh(self): 
     for r in range(self.rows): 
      for c in range(self.columns): 
       self.widgets[r][c].configure(text=random.randint(0,99)) 

     # call this function again in 5 seconds 
     self.after(5000, self.refresh) 

root = tk.Tk() 
Table(root).pack(fill="both", expand=True) 
root.mainloop() 
+0

Tanks Bryan, das ist genau so, ich wollte es haben. Also vielen Dank. – Puetong0815