J'essaie de faire apparaître une étiquette pendant 2 secondes lorsque la condition est remplie. L'utilisateur est censé saisir 3 champs, s'il ne le fait pas, je ne veux pas qu'il soit autorisé à continuer. Je ne suis pas en mesure de supprimer cette étiquette appelée "warnlabel", quelle que soit l'approche. S'il vous plaît laissez-moi savoir ce que je fais mal.

def get_API_KEYS():  #Main function
    root = Tk()
    """...other declarations / conditions  / window settings ..."""
    def Save_KC_Keys(): #Button press triggers this function
        if len(UE1_var.get()) == 0 or len(UE2_var.get()) == 0 or len(UE3_var.get()) == 0:
            warnlabel = Label(root, text="MUST ENTER ALL 3").grid(row=1, column=3)

            #root.forget(Label)
            #root.after(1000, root.destroy(warnlabel))
            #root.forget(warnlabel)
        """...other conditions..."""
    root.mainloop()

J'ai essayé .forget / .destroy / .after (je préférerais que .after fonctionne), mais dans presque toutes les configurations, je reçois une erreur telle que :

return getattr(self.tk, attr)
AttributeError: '_tkinter.tkapp' object has no attribute '_name'

root.after(1000, root.destroy(warnlabel))
TypeError: Tk.destroy() takes 1 positional argument but 2 were given

self.tk.call('wm', 'forget', window)
_tkinter.TclError: wrong # args: should be "wm option window ?arg ...?"
1
Sanko Hunbucse 28 nov. 2021 à 04:50

1 réponse

Meilleure réponse

Tenter de faire

root.after(2000, lambda: warnlabel.destroy())

Essayez de l'utiliser sans lambda.

Et aussi changer

warnlabel = Label(root, text="MUST ENTER ALL 3").grid(row=1, column=3)

Pour ça

warnlabel = Label(root, text="MUST ENTER ALL 3")
warnlabel.grid(row=1, column=3)
1
Aleksas 28 nov. 2021 à 05:29
1
Vous n'avez pas besoin de lambda ici. Vous pouvez l'utiliser, mais ce n'est pas nécessaire.
 – 
Bryan Oakley
28 nov. 2021 à 05:02
Avec Lambda : Exception in Tkinter callback Traceback (appel le plus récent en dernier) : File "C:\Users\BEAST\AppData\Local\Programs\Python\Python310\lib\tkinter_init_.py", ligne 1921, dans call retourne self.func(*args) File"C:\Users......\Python310\lib\tkinter_init_.py", ligne 839, dans callit func(*args) File "C:\Users\BEAST\PycharmProjects\WebScraping\GUI_Test.py", ligne 77, dans root.after(2000, lambda: warnlabel.destroy()) #Remove étiquette d'avertissement. AttributeError : l'objet 'NoneType' n'a pas d'attribut 'destroy'
 – 
Sanko Hunbucse
28 nov. 2021 à 05:20
Sans lambda : Exception dans le rappel de Tkinter Traceback (appel le plus récent en dernier) : Fichier "C:\Users\BEAST\AppData\Local\Programs\Python\Python310\lib\tkinter_init_.py", ligne 1921, dans call return self.func(*args) File "C:\Users\BEAST\PycharmProjects\WebScraping\GUI_Test.py", ligne 77, dans Save_KC_Keys root.after(2000, warnlabel. destroy()) #Supprimer l'étiquette d'avertissement. AttributeError : l'objet 'NoneType' n'a pas d'attribut 'destroy'
 – 
Sanko Hunbucse
28 nov. 2021 à 05:21
Ohh, c'est parce que vous utilisez instantanément la méthode .grid(). Vous stockez une variable sans type.
 – 
Aleksas
28 nov. 2021 à 05:27
Warnlabel = Label(root, text="MUST ENTER ALL 3")
 – 
Aleksas
28 nov. 2021 à 05:27