Когда вы используете oops с tkinter, попробуйте сделать каждую переменную глобальной в классе с использованием self
(self.saisie = StringVar()
), особенно когда вы используете эту переменную в другой функции.
Также определение функции внутри не является плохим подходом, но может быть лучше, если вы определите ее с помощью self
вне класса.
Еще одна вещь, которая выдает ошибку, если вы нажимаете кнопку 'Generer' перед нажатием кнопки 'Quitter', это потому, что переменная 'lettrer' будет определять только если вы нажмете 'Quitter', так что либо вы определяете ее в __init__
как self.lettrer = None
или просто дать первый случайный выбор self.lettrer = choice(liste)
. Это предотвратит вас от ошибки: AttributeError: 'Interface' object has no attribute 'lettrer'
.
Вот обновленный код:
from tkinter import *
from random import *
from tkinter.messagebox import *
liste = ["A TI TA", "B TA TI TI TI", "C TA TI TA TI", "D TA TI TI", "E TI", "F TI TI TA TI", "G TA TA TI", "H TI TI TI TI", "I TI TI", "J TI TA TA TA", "K TA TI TA", "L TI TA TI TI", "M TA TA", "N TA TI", "O TA TA TA", "P TI TA TA TI", "Q TA TA TI TA", "R TI TA TI", "S TI TI TI", "T TA", "U TI TI TA", "V TI TI TI TA", "W TI TA TA", "X TA TI TI TA", "Y TA TI TA TA", "Z TA TA TI TI"]
class Interface(Frame):
def __init__(self, fenetre, **kwargs):
Frame.__init__(self, fenetre, width=768, height=576, **kwargs)
self.pack(fill=BOTH)
self.lettrer = choice(liste)
self.message2 = Label(self, text="APRENDRE LE CODE MORSE")
self.message2.pack(side="top")
self.message = Label(self, text="Cliquez sur générer")
self.message.pack()
self.lettre = Label(self, text="")
self.lettre.pack()
self.saisie= StringVar()
self.champ = Entry(self, textvariable = self.saisie, bg = "bisque", fg = "maroon")
self.champ.focus_set()
self.champ.pack()
self.bouton_quitter = Button(self, text="Quitter", command=self.quit)
self.bouton_quitter.pack(side="left")
self.bouton_cliquer = Button(self, text="Generer", textvariable = "lettrer", command = self.cliquer)
self.bouton_cliquer.pack(side="right")
self.confirmbouton = Button(self, text="Valider", command = self.verification)
self.confirmbouton.pack()
def cliquer(self):
self.lettrer = choice(liste)
self.lettre["text"] = self.lettrer
def verification(self):
if self.saisie.get() == self.lettrer:
showinfo("Saisie correcte", "Saisie correcte")
else:
showinfo("Erreur", "ERREUR")
fenetre = Tk()
interface = Interface(fenetre)
interface.mainloop()
interface.destroy()
Надеюсь, это поможет вам.