Ich versuche ein Etikett zu aktualisieren, aber der Code, den ich geschrieben habe, erstellt jedes Mal ein neues Etikett. Ich bin relativ neu zu tkinter, also konnte ich nicht verstehen, wie man andere Antworten auf meinen Code anwendet.Aktualisierung tkinter label
from tkinter import *
import random
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master=master
self.init_window()
def init_window(self):
self.pack(fill=BOTH, expand=1)
testButton=Button(self, text="Press", command=calc)
testButton.pack()
l1=Label(text="")
def testbutton(ans): #creates a new instance of l1 each time, I want to update existing l1
var=StringVar()
l1=Label(textvariable=var) #l1.configure() gives error l1 not defined
var.set(ans)
l1.pack()
def calc():
list1=["a","b","c"]
index=random.randint(0,2)
answer=list1[index]
Window.testbutton(answer)
root=Tk()
root.geometry("400x300")
app=Window(root)
root.mainloop()
Jedes Mal, wenn die Taste gedrückt wird, wird ein neues Etikett erstellt, statt den Text auf dem Etikett vorhandenen zu aktualisieren. Dies ist eine vereinfachte Version meines aktuellen Projekts, hebt jedoch das Problem mit Etiketten hervor. Ich habe versucht, l1.configure(...)
innerhalb der Testbutton-Funktion zu verwenden, aber dann führt es einen Fehler, dass l1 nicht definiert ist.
Danke, das löst mein Problem. Warum benötigt das Label l1 in init_window die self.l1 ...? –
Becky: Das 'self.l1 = Label (text =" ")' ist, wie das 'Label' Widget, das erstellt wird, an die' Window' Instanz zur späteren Referenz angefügt wird. In Python können Sie jederzeit neue Instanzattribute erstellen, indem Sie dem Namen, den Sie verwenden möchten, einen Wert zuweisen: z. B. 'self.attribute_name = ...'. Sie können sie auch mit 'del self.attribute_name' löschen. – martineau