IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Cacher la valeur d'une variable [tkinter]


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Par défaut Cacher la valeur d'une variable [tkinter]
    Bonjour après divers recherche je n'ai pas trouvé la solution à mon problème :
    A la base on doit saisir un mot dans une case, là j'ai réussi à le cacher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne_texte = Entry(fen, show='*', bg = 'bisque', fg='maroon')
    ligne_texte.pack()
    Après une nouvelle fenêtre s'ouvre et dans celle-ci le mot doit être affiché avec les "*" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mot=ligne_texte.get()
    LabelMot=Label(fen2, text=mot, bg='bisque',fg='maroon')
    LabelMot.grid(row='3', column='2')
    Cependant j'ai essayé de rajouer show"*" dans le label mais cela ne marche pas donc je ne sais pas comment faire, merci d'avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Salut,

    Entry affiche ce que l'utilisateur tape et il peut être utile d'afficher des '*' a la place des caractères tapés.
    Label affiche le texte que vous avez décidé d'y afficher.
    Et si vous voulez afficher des '*' à la place de mot, à vous de jouer.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Par défaut
    Il est bien là mon problème, j'ai essayé de faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LabelMot=Label(fen2, text=mot, show="*", bg='bisque',fg='maroon')
    Cependant la fonction "show" n'est apparemment pas compatible avec les Labels.

    Merci.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Alka54 Voir le message
    Il est bien là mon problème, j'ai essayé de faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LabelMot=Label(fen2, text=mot, show="*", bg='bisque',fg='maroon')
    Cependant la fonction "show" n'est apparemment pas compatible avec les Labels.

    Merci.
    Cher ami,

    ne vous faites pas plus bête que vous ne l'êtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LabelMot=Label(fen2, text="**********", bg='bisque',fg='maroon')
    si déjà vous voulez masquer un mot de passe, ne laissez aucune indication ni en longueur du mot de passe ni en contenu.

    donc un texte "*************" bidon suffit amplement.

    @+.

  5. #5
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Par défaut
    Non mais justement je me suis mal exprimé au départ, cela n'a rien à voir avec un mot de passe, c'est pour un Jeu du Pendu.

    Je vous montre le principal :

    Nom : 1401118700-pendu1.png
Affichages : 5674
Taille : 9,9 Ko

    Ici je saisie le mot que le joueur doit deviner et j'arrive bien à le cacher, cependant maintenant :

    Nom : 1401118700-pendu2.png
Affichages : 5302
Taille : 15,1 Ko

    J'essaye de remplacer le mot "pendu" entré précédemment par des "*".

    Merci.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Alka54 Voir le message
    Non mais justement je me suis mal exprimé au départ, cela n'a rien à voir avec un mot de passe, c'est pour un Jeu du Pendu.

    Je vous montre le principal :

    Nom : 1401118700-pendu1.png
Affichages : 5674
Taille : 9,9 Ko

    Ici je saisie le mot que le joueur doit deviner et j'arrive bien à le cacher, cependant maintenant :

    Nom : 1401118700-pendu2.png
Affichages : 5302
Taille : 15,1 Ko

    J'essaye de remplacer le mot "pendu" entré précédemment par des "*".

    Merci.
    OK, vu.

    dans ce cas, il faut faire quelque chose dans ce goût-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mot_a_trouver = ligne_texte.get()
    # ceci est conforme aux règles du pendu
    mot_masque = mot_a_trouver[0] + ("*" * (len(mot_a_trouver) - 2)) + mot_a_trouver[-1]
    LabelMot=Label(fen2, text=mot_masque, bg='bisque',fg='maroon')
    LabelMot.grid(row='3', column='2')
    étant donné que les règles du pendu stipulent que l'on doit afficher la première et dernière lettre du mot à deviner.

    @+.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Citation Envoyé par Alka54 Voir le message
    J'essaye de remplacer le mot "pendu" entré précédemment par des "*".
    Le travail est à faire côté chaines de caractères.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> mot = 'pendu'
    >>> print ('*' * len(mot))
    *****
    >>>
    Puis si vous voulez passer cette chaine de caractère la dans le paramètre "text" d'un Label tk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> LabelMot=Label(fen2, text='*' * len(mot), bg='bisque',fg='maroon')
    >>> LabelMot['text'] = '*' * len(mot)
    Dit autrement, mettre à jour le "text" d'un Label, mais votre soucis est côté "calcul" de la chaîne de caractère à lui passer.
    Le jeu de "pendu", mettre la chaine dans un Label sont importants pour vous mais côté "code" à réaliser, çà n'a pas grande importance.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Par défaut
    En effet cela marche bien, par contre pourrais-tu m'expliquer plus en détail cette ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mot_masque = mot_a_trouver[0] + ("*" * (len(mot_a_trouver) - 2)) + mot_a_trouver[-1]
    Merci.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Alka54 Voir le message
    En effet cela marche bien, par contre pourrais-tu m'expliquer plus en détail cette ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mot_masque = mot_a_trouver[0] + ("*" * (len(mot_a_trouver) - 2)) + mot_a_trouver[-1]
    Merci.
    simple : mot_a_trouver[0] c'est la première lettre de la chaîne de caractères qui se trouve dans la variable mot_a_trouver, le comptage des indices commence à 0 pour la 1re lettre, 1 pour la 2nde, 2 pour la 3ème, etc...

    ensuite : "*" * (len(mot_a_trouver) - 2) ça c'est une notation Python, vous pouvez multiplier un morceau de chaîne de caractères n fois en faisant "texte" * n

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> print("A" * 5)
    >>> AAAAA
    >>> print("AB" * 5)
    >>> ABABABABAB
    l'expression len(mot_a_trouver) - 2 signifie longueur de la chaîne contenue dans mot_a_trouver moins 2 caractères étant donné qu'on affiche la 1re et la dernière lettre (donc on ne masque que les n-2 caractères se trouvant entre la 1re et la dernière lettre).

    puis : mot_a_trouver[-1] est un indice négatif qui part de la fin de la chaîne de caractères contenue dans mot_a_trouver et qui remonte d'1 donc c'est la dernière lettre de mot_a_trouver.

    au final : mot_masque se compose donc de la première lettre visible de mot_a_trouver puis d'étoiles puis de la dernière lettre visible de mot_a_trouver.

    @+.

  10. #10
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Par défaut
    Merci pour ta réponse wiztricks mais du coup je vais afficher la première et la dernière lettre, j'avais complétement oublié cette condition.

    Merci pour les précisions tarball69.

    Maintenant j'essaye de faire en sorte que lorsque l'on saisie une lettre qui se trouve dans le mot alors celle-ci vient remplacer l'étoile qui se trouve à son emplacement, j'ai commencé comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def SaisirLettre():
            lettre=ligne_texte2.get()
            if len(lettre)>1 or not lettre.isalpha():
                 showwarning('Erreur', 'La lettre saisie est incorrecte. \nVeuillez saisir une lettre valide.')
            else :
                return lettre
            while mot_a_trouver != mot_masque and chances > 0 :
                if lettre in mot_a_trouver :
     
                else :
                    chances -= 1
    Cependant je ne sais pas quoi mettre entre "if lettre in mot_a_trouver : et "else". Des indications ?

    Merci.

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Citation Envoyé par Alka54 Voir le message
    Cependant je ne sais pas quoi mettre entre "if lettre in mot_a_trouver : et "else". Des indications ?
    Côté chaîne de caractères, çà peut se faire avec .replace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> s = 'ababa'
    >>> s.replace('a', 'x')
    'xbxbx'
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Alka54 Voir le message
    Merci pour ta réponse wiztricks mais du coup je vais afficher la première et la dernière lettre, j'avais complétement oublié cette condition.

    Merci pour les précisions tarball69.

    Maintenant j'essaye de faire en sorte que lorsque l'on saisie une lettre qui se trouve dans le mot alors celle-ci vient remplacer l'étoile qui se trouve à son emplacement, j'ai commencé comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def SaisirLettre():
            lettre=ligne_texte2.get()
            if len(lettre)>1 or not lettre.isalpha():
                 showwarning('Erreur', 'La lettre saisie est incorrecte. \nVeuillez saisir une lettre valide.')
            else :
                return lettre
            while mot_a_trouver != mot_masque and chances > 0 :
                if lettre in mot_a_trouver :
     
                else :
                    chances -= 1
    Cependant je ne sais pas quoi mettre entre "if lettre in mot_a_trouver : et "else". Des indications ?

    Merci.
    le code que vous présentez là va vous causer des ennuis : la boucle while est injustifiée, même si "humainement" on comprend ce que vous voulez faire, l'ordinateur lui risque d'épuiser toutes les chances dès la première saisie de lettre incorrecte.

    en revanche, votre début de test est plutôt bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if lettre in mot_a_trouver:
        # on n'a qu'à remplacer chaque "*" par la lettre correspondante
        # à la position où on la trouve avec str().find() par exemple
    else:
        chances -= 1
    voir documentation : https://docs.python.org/3/library/st....html#str.find

    @+.

  13. #13
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Par défaut
    Merci pour vos indications mais étant débutant même avec je ne sais pas comment débuter...

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Citation Envoyé par Alka54 Voir le message
    Merci pour vos indications mais étant débutant même avec je ne sais pas comment débuter...
    Il serait sage de débuter avec un jeu de pendu où tout se passe à la console.
    C'est moins sexy mais cela vous permettrait de mieux maîtriser ce qu'il faut faire côté chaîne de caractère.
    Après vous pouvez vous amuser à faire une interface graphique avec Tk.

    Débutez sans trop comprendre les structures de bases Python et en ajoutant par dessus les difficultés d'une interface graphique, n'est pas un bon plan de route.
    Il vous condamne à construire votre programme en mendiant des bouts de code dans les forums.
    Si vous voulez débutez, prenez le temps d'apprendre avec un tuto en faisant des exercices à la console.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Alka54 Voir le message
    Merci pour vos indications mais étant débutant même avec je ne sais pas comment débuter...
    Extrait de la doc :

    str.find(sub[, start[, end]])
    Return the lowest index in the string where substring sub is found, such that sub is contained in the slice s[start:end]. Optional arguments start and end are interpreted as in slice notation. Return -1 if sub is not found.
    La méthode find() d'une chaîne de caractères sert à chercher la position d'une sous-chaîne de caractères dans une autre chaîne de caractères avec des indices start et stop optionnels.

    Si .find() trouve ce que l'on recherche, la position obtenue sera >= 0.

    Si .find() ne trouve pas ce que l'on recherche, la position obtenue sera -1 (c'est donc un bon indicateur pour tester si pas trouvé).

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    ma_chaine = "mot à trouver"
     
    print("recherches dans la chaîne de caractères '{}'".format(ma_chaine))
     
    # on peut chercher une sous-chaîne
     
    position = ma_chaine.find("ver")
     
    print("pour 'ver'\tposition trouvée :", position)
     
    # on peut aussi chercher juste 1 caractère
     
    position = ma_chaine.find("t")
     
    print("pour 't'\tposition trouvée :", position)
     
    # on peut enfin ne pas trouver
     
    position = ma_chaine.find("toto")
     
    print("pour 'toto'\tposition trouvée :", position)
    Allez, un peu d'huile de coude et d'ingéniosité, vous allez trouver.

    @+.

Discussions similaires

  1. [XSL] Comment modifier la valeur d'une variable?
    Par sorcer1 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/02/2010, 13h26
  2. récupération d'une valeur dans une variable
    Par jh0483 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/08/2005, 09h49
  3. Réponses: 2
    Dernier message: 16/08/2005, 09h43
  4. afficher dans une boite de dialogue la valeur d'une variable
    Par micknic dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/07/2005, 09h25
  5. Intercepter le changement de valeur d'une variable
    Par Captain_JS dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/01/2005, 08h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo