Python / tkinter Label Widget aktualisieren?

Ich arbeite daran, ein Python / Tkinter Label Widget zu bekommen, um seinen Inhalt zu aktualisieren. Per ein früherer Thread heute, folgte ich Anweisungen auf, wie man die Widgets zusammenstellte. Zur Laufzeit jedoch verlangt das Label-Widget den Inhalt nicht, sondern behält einfach seinen ursprünglichen Inhalt. Soweit ich sagen kann, ist decment_widget () überhaupt nicht angerufen. Irgendwelche Ideen?

def snooze (secs): """ Snoozes for the given number of seconds. During the snooze, a progress dialog is launched notifying the """ root = Tkinter.Tk() prompt = 'hello' label1 = Tkinter.Label(root, text=prompt, width=len(prompt)) label1.pack() remaining = secs def decrement_label (): text = "Snoozing %d sec(s)" % remaining remaining -= 1 label1.config(text=text, width=100) label1.update_idletasks() for i in range(1, secs + 1): root.after(i * 1000, decrement_label ) root.after((i+1) * 1000, lambda : root.destroy()) root.mainloop() 

3 Solutions collect form web for “Python / tkinter Label Widget aktualisieren?”

Sie wollen die textvariable des Labels mit einem StringVar . Wenn sich der StringVar ändert (indem man myStringVar.set("text here") ), wird der Text des Labels auch aktualisiert. Und ja, ich bin einverstanden, das ist eine seltsame Art, Dinge zu tun.

Siehe das Tkinter Buch für ein wenig mehr Informationen dazu:

Sie können eine Tkinter-Variable mit einem Label verknüpfen. Wenn sich der Inhalt der Variablen ändert, wird das Label automatisch aktualisiert:

 v = StringVar() Label(master, textvariable=v).pack() v.set("New Text!") 

Ich denke, du bekommst einen "referenzierten vor Zuordnung" Fehler, weil Python denkt, dass es im lokalen Bereich remaining .

In Python 3 kannst du nonlocal remaining . Aber in Python 2 glaube ich nicht, dass es einen Weg gibt, sich auf einen nicht-lokalen, nicht-globalen Bereich zu beziehen. Das hat für mich gearbeitet

 remaining = 0 def snooze (secs): """ Snoozes for the given number of seconds. During the snooze, a progress dialog is launched notifying the """ global remaining root = Tkinter.Tk() prompt = 'hello' label1 = Tkinter.Label(root, text=prompt, width=len(prompt)) label1.pack() remaining = secs def decrement_label (): global remaining text = "Snoozing %d sec(s)" % remaining remaining -= 1 label1.config(text=text, width=100) label1.update_idletasks() for i in range(1, secs + 1): root.after(i * 1000, decrement_label ) root.after((i+1) * 1000, lambda : root.destroy()) root.mainloop() 
  import tkinter from tkinter import * # just init some vars remaining = 0 secs = 0 root = tkinter.Tk() prompt = StringVar() def snooze (secs): """ Snoozes for the given number of seconds. During the snooze, a progress dialog is launched notifying the """ def decrement_label (): global remaining, prompt remaining -= 1 prompt.set('Snoozing %d sec(s)' % remaining) label1.update_idletasks() if not remaining: print("end ... ") root.destroy() global remaining prompt.set("hello") label1 = tkinter.Label(root, textvariable=prompt, width=30) label1.pack() remaining = secs for i in range(1, secs + 1): root.after(i * 1000, decrement_label ) snooze(10) root.mainloop() 
  • Python tkinter - Wie lösche ich alle Kinderelemente?
  • Tkinter Label Hintergrund?
  • Spielen Sie Animationen in GIF mit Tkinter
  • Verwenden von Grid und Pack mit Frames Tkinter
  • Python Tkinter löscht einen Rahmen
  • Wie beschleunige ich tkinter embedded matplot lib und python
  • Python Tkinter: Ladebildschirm
  • Python: Konvertieren von CLI in GUI
  • Das Konsolenfenster ausblenden
  • Verwenden von PILs ImageDraw-Modul
  • Tkinter- und GUI-Programmierverfahren
  • Python ist die beste Programmiersprache der Welt.