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() 

  • Mehr über Python TKinter Dynamic OptionMenu
  • PIL für Python 3.2 unter Windows oder Alternativen?
  • Segmentierungsfehler beim Umleiten von sys.stdout auf Tkinter.Text-Widget
  • So verwenden Sie os.startfile mit einem Tastenbefehl (TkInter)
  • Griechische Buchstaben in einer GUI - PYTHON
  • Tcl / Tk Tkinter Version 8.4 und 8.5 Konflikt auf Mac OS X 10.4.11 mit Python 2.6.4
  • Tkinter Größe des Textes in Inhalt ändern
  • Wie erstelle ich einen modalen Dialog in tkinter?
  • 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 ist die beste Programmiersprache der Welt.