Partage
  • Partager sur Facebook
  • Partager sur Twitter

Afficher un label 1 fois tkinter python

7 janvier 2020 à 19:08:19

Bonjour,

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

  • Partager sur Facebook
  • Partager sur Twitter
7 janvier 2020 à 19:44:42

Ç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.

  • Partager sur Facebook
  • Partager sur Twitter

Blond, bouclé, toujours le sourire aux lèvres...

7 janvier 2020 à 20:04:33

Tu saurait comment afficher le code python je trouve nulle part merci

-
Edité par IlianSi 7 janvier 2020 à 21:03:42

  • Partager sur Facebook
  • Partager sur Twitter
8 janvier 2020 à 9:38:45

Cliques sur le bouton </> de l'éditeur de message et choisi le langage python.
  • Partager sur Facebook
  • Partager sur Twitter
8 janvier 2020 à 12:28:42

Jojuss a écrit:

Cliques sur le bouton </> de l'éditeur de message et choisi le langage python.


Ok merci à ce que je vois sa n'y est pas sur smartphone
  • Partager sur Facebook
  • Partager sur Twitter
10 janvier 2020 à 1:16:55

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()



  • Partager sur Facebook
  • Partager sur Twitter
10 janvier 2020 à 13:55:34

Bonjour ,

Après avoir testé ton code, il manque juste de compléter le gestionnaire d'événement dans la déclaration de la fonction :

def __text__(event, duration=300):

Pour plus d'infos tu peux consulter la documentation suivante :

http://tkinter.fdex.eu/doc/event.html

  • Partager sur Facebook
  • Partager sur Twitter
10 janvier 2020 à 16:49:27

Ce n'est pas la le problème 

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 10 janvier 2020 à 16:50:46

  • Partager sur Facebook
  • Partager sur Twitter
10 janvier 2020 à 20:01:00

IlianSi a écrit:

Ce n'est pas la le problème 

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)



  • Partager sur Facebook
  • Partager sur Twitter
19 janvier 2020 à 16:39:47

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
  • Partager sur Facebook
  • Partager sur Twitter
22 janvier 2020 à 17:33:43

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()"""



  • Partager sur Facebook
  • Partager sur Twitter
14 juin 2023 à 14:54:42 - Message modéré pour le motif suivant : Merci d’utiliser le bouton code pour inséré un code sur le forum


14 juin 2023 à 15:39:37

@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 </>.

Déterrage

Citation des règles générales du forum :

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

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter