Je ne trouve pas comment appeler un label que 1 fois
Je fais un programme ou si on appuie sur la mauvaise touche sa met une erreur qui est afficher sous forme de label
Sauf que quand j'appuie sur cette touche plusieurs fois le label s'affiche plusieurs fois or je voudrai que si le label est afficher je peut l'afficher que une fois et puis quand il disparaît il faudrait que je puisse le reafficher
Ça se fait avec une condition if / else, je suppose qu'il y a moyen de tester si un label est affiché ou non (j'ai pas trop l'habitude des interfaces graphiques), sinon tu peux ajouter un flag (une variable booléenne) pour savoir si le label est affiché ou non et adapter le comportement du programme en fonction.
Si tu n'y arrives toujours pas avec ça, poste ton code.
voila le code j'aimerai que quand je clique sur la touche ENTRER que "text" s'affiche et que si je reclique il ne s'affiche pas 2 fois
from tkinter import *
root = Tk()
# je defini une fonction qui va afficher le texte et le # supprimer au bout de 3 sec
def __text__(duration=3000):
text = Label(root, text='test')
text.after(duration, text.destroy)
text.pack(expand=YES)
# je fais une fonction que si j'appui sur la touche
# ENTRER sa apelle le text
root.bind('<Return>', __text__)
root.mainloop()
Le problème est que si je clique sur ENTRER 2 fois le texte s'affichera 2 fois or je voudrai qu'il ne s'affiche qu'une fois
- Edité par IlianSi il y a environ 1 heure
Effectivement mais c'est plus propre, à mon gout
Tu peux résoudre ton problème en vidant le contenu de ta fenêtre Tk avant de créer le Label "text", au début de ta fonction
la méthode winfo.children() fait cela très bien :
def __text__(event, duration=3000):
for widget in root.winfo_children():
widget.destroy()
text = Label(root, text='test')
text.after(duration, text.destroy)
text.pack(expand=YES)
Sa serai une idée mais je ne peut pas dans mon programme j'ai un entry et si je met une mauvaise lettre le message s'affiche donc si je supprime le contenu de la fenêtre sa ne sera pas bon
Je ne sais pas si c'est bien propre mais tu peux passer par des Frames, comme ceci :
# _*_coding: utf-8_*_
import sqlite3
import datetime
import string
from random import randint
from tkinter import *
root = Tk()
root.geometry("400x400")
# Création de deux Frame our séparer les widgets
frame_label = Frame(root)
frame_label.pack()
frame_entry = Frame(root)
frame_entry.pack()
# L'entrée de la fonction vide uniquement le Label
def __text__(event, duration=3000):
for widget in frame_label.winfo_children():
widget.destroy()
text = Label(frame_label, text='test')
text.after(duration, text.destroy)
text.pack(expand=YES)
root.bind('<Return>', __text__)
root.mainloop()
"""if __name__ == '__main__':
main()"""
@MichelWenga Bonjour, merci de ne pas squatter le sujet des autres, créer votre propre sujet dans le respect des règles du forum à savoir qu'un message commence par des règles de politesses (Un bonjour ou des salutations à la communauté et se termine par des remerciements par avances pour les futures réponses), la description de votre problème et le code que vous avez écrit inséré sur le forum à l'aide de l'outil d'intégration de code soit le bouton code </>.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Blond, bouclé, toujours le sourire aux lèvres...