Le script suivant crée une fenêtre tkinter avec une étiquette de texte, bouton de sortie et le bouton changer de texte:python - changement d'étiquette tkinter
from tkinter import *
from tkinter import ttk
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.init_window()
def init_window(self):
test_label = Label(root, text="none").grid(row=0, column=0, sticky=W)
change_text_btn = Button(root, text="change_text", command=self.set_label_text).grid(row=2, column=0, sticky=W)
exit_btn = Button(root, text="Exit", command=self.client_exit).grid(row=2, column=1, sticky=W)
def set_label_text(self):
test_label.config(text='changed the value')
def client_exit(self):
exit()
if __name__ == '__main__':
root = Tk()
app = Window(root)
root.mainloop()
Après avoir cliqué sur change_text_btn
j'obtiens une erreur NameError: name 'test_label' is not defined
. Donc, le problème est que test_label
créé dans init_window()
n'est pas disponible à partir de set_label_text()
parce que l'étendue. Comment je le répare?
Pourriez-vous mettre en retrait la fonction 'set_label_text' pour la différencier de' init_window? ' – GreenSaber
Il suffit de l'indenter - doent work; indentation et modification comme ceci: 'def set_label_text (auto): self.test_label.config (text = 'a changé la valeur')' ne fonctionne pas; indentation et modification comme ceci: 'def set_label_text(): test_label.config (text = 'a changé la valeur')' ne fonctionne pas aussi bien; dans tous les cas, l'objet 'Window' n'a pas d'attribut 'set_label_text'' erreur – t411tocreate