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 :

Problème Tkinter affichage entry


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 24
    Points : 11
    Points
    11
    Par défaut Problème Tkinter affichage entry
    Bonjour, je suis assez nouveau sur Python et encore plus sur Tkinter... Mon but est de faire une interface graphique avec en fond une image de livre et où par dessus il y aurai une zone de texte qui récupère une chaîne de caractères pour vérifier si cette chaîne est un palindrome et si oui afficher un texte sur la fenêtre. Mon programme de vérification de palindrome est fonctionnel et l'interface graphique quasiment seulement je n'arrive pas à afficher La zone de texte sur la background de la fenêtre....

    Nom : 1572213906-capture.png
Affichages : 780
Taille : 622,9 Ko Voila ce que ça donne....


    Merci de votre aide...


    Voici mon programme :

    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
    from tkinter.messagebox import * # boîte de dialogue
    import tkinter as tk
     
    root = tk.Tk() #On initialise la fenetre
    root.title('Palindrome ?')#On nomme la fenetre
     
    image1 = tk.PhotoImage(file="Livre.png") #On initialise le fond d'écran
    w = image1.width()
    h = image1.height()
     
    root.geometry("%dx%d+0+0" % (w, h)) #On adapte la taille de la fenêtre à l'image
     
     
    Entree = tk.Entry(root)     # On définit l'objet Entry qui porte le nom Entree
    Entree.pack(side = 'left')               # On place "Entree"
     
     
    fond = tk.Label(root, image=image1)
    fond.pack()
     
     
    root.mainloop()
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 313
    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 313
    Points : 36 819
    Points
    36 819
    Par défaut
    Salut,

    Citation Envoyé par Armusclor Voir le message
    seulement je n'arrive pas à afficher La zone de texte sur la background de la fenêtre....
    .pack et .grid permettent de distribuer l'espace disponible de la "fenêtre" entre mes différents widgets. Si vous voulez placer un widget "au dessus", il va falloir utliser .place ou un Canvas.

    - W

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    merci de votre réponse rapide.
    J'ai essayé avec un .place mais maintenant je ne vois plus du tout l'entry...

    voici ce que j'ai essayé

    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
    from tkinter.messagebox import * # boîte de dialogue
    import tkinter as tk
     
    root = tk.Tk() #On initialise la fenetre
    root.title('Palindrome ?')#On nomme la fenetre
     
    image1 = tk.PhotoImage(file="Livre.png") #On initialise le fond d'écran
    w = image1.width()
    h = image1.height()
     
    root.geometry("%dx%d+0+0" % (w, h)) #On adapte la taille de la fenêtre à l'image
     
     
    Entree = tk.Entry(root)     # On définit l'objet Entry qui porte le nom Entree
    Entree.place()               # On place "Entree"
     
     
    fond = tk.Label(root, image=image1)
    fond.pack()
     
     
    root.mainloop()

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 313
    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 313
    Points : 36 819
    Points
    36 819
    Par défaut
    Salut,

    Citation Envoyé par Armusclor Voir le message
    J'ai essayé avec un .place mais maintenant je ne vois plus du tout l'entry...
    "programmer", c'est comprendre ce qu'on fait...

    Si vous partez à utiliser .place et que çà ne fonctionne pas, il faut ouvrir une documentation qui explique comment çà marche et faire quelques essais pour voir si on a bien compris ce qu'elle raconte (et qu'on pourra s'en servir pour réaliser ce qu'on en attend).

    - W

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Merci pour votre réponse. J'ai pu avancer sur mon code mais je me retrouve face à un autre problème....


    Le texte entré dans l'entry ne passe pas les différentes fonctions qu'il devrait et au démarrage du programme la console affiche des résultats alors même qu'aucun texte n'a été rentré

    Voici le code

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    from tkinter.messagebox import * # boîte de dialogue
    import tkinter as tk
     
     
    car = {                  # on ouvre un dictionnaire pour standardiser l'écriture de la chaine (supprimer les accents, les majuscules, la ponctuation et les escpaces)
                "à" : "a",
                "ä" : "a",
                "â" : "a",
                "ç" : "c",
                "é" : "e",
                "è" : "e",
                "ë" : "e",
                "ï" : "i",
                "ô" : "o",
                "ù" : "u",
                "ü" : "u",
                "û" : "u",
                " " : "",
                "-" : "",
                "," : "",
                "'" : "",
                "?" : "",
                "!" : "",
                "." : ""
        }
     
    #CRéation de la fenetre
    root = tk.Tk() #On initialise la fenetre
    root.title('Palindrome ?')#On nomme la fenetre
     
     
     
    palind = str(tk.StringVar())
     
     
    #Création de la fonction de remplacement des caracteres sepciaux
    def remplacement(x):
            x = x.lower()  # tout mettre en minuscule
            for caracInitial,caracFinal in car.items(): # permet de remplacer les caractère initials (avec accents,..) par leur équivalents (sans accents, sans majuscule,...)
                x = x.replace(caracInitial,caracFinal)
            return x
     
     
     
     
    #Creation de la fonction de detection
    def palindrome(x):
        for i in range(len(x)//2):  # on divise la longueur du caratère par 2,
            if x[i] != x[-i-1]: # on regarde si le caractère de rang i est différent du caractère de rang –i-1
                print("Ce n'est pas un palindrome")
        print("C'est un palindrome")
     
     
     
     
     
    #Creation de l'arriere plan et de la taille de la fenetee
    image1 = tk.PhotoImage(file="Livre.png")
    w = image1.width()
    h = image1.height()
    root.geometry("%dx%d+0+0" % (w, h))
    fond = tk.Label(root, image=image1)
    fond.pack()
     
     
     
     
    #Création de du champ de saisie
     
    Entree = tk.Entry(root, textvariable= palind)
    Entree.focus_set()
    Entree.place(x=363, y=470, anchor='w')
     
     
    x = remplacement(palind)
     
    #Creation du bouton de validation
    Bouton = tk.Button(root, text ='Valider', command = palindrome(x))
    Bouton.place(x=400, y=500, anchor='w')
     
     
     
     
    root.mainloop()

    Meme en reprenant tout à zéro je ne comprends pas le problème
    MErci de votre aide

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 313
    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 313
    Points : 36 819
    Points
    36 819
    Par défaut
    Salut,

    Citation Envoyé par Armusclor Voir le message
    au démarrage du programme la console affiche des résultats alors même qu'aucun texte n'a été rentré
    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bouton = tk.Button(root, ..., command = palindrome(x))
    c'est le retour de l'appel à la fonction palindrome(x) qui est None qui sera passé comme command.

    Citation Envoyé par Armusclor Voir le message
    Le texte entré dans l'entry ne passe pas les différentes fonctions qu'il devrait
    Vu le code que vous avez écrit, ce n'est pas surprenant.

    Citation Envoyé par Armusclor Voir le message
    Meme en reprenant tout à zéro je ne comprends pas le problème
    S'il y avait seulement une petite erreur, je vous donnerai une piste ou même la solution. Votre truc est un champ de mines.

    Vous codez comme tout ceux qui, après avoir écrit un programme en mode console, veut le rendre plus flashy en utilisant une interface graphique.
    C'est une bonne idée, mais c'est un tout autre programme à écrire car çà ne fonctionne pas du tout pareil.
    Il va falloir passer un peu de temps par la case tuto.

    - W

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    D'accord merci tout de meme de votre aide

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725
    Par défaut
    Salut,

    Effectivement c'est un problème qu'on voit aussi ailleurs, il faut juste mettre le nom de la fonction* ( sachant que : nom de la fonction + parenthèses ---> exécution de la fonction).

    * J'ai réussi à faire fonctionner le code en faisant quelques changements : Bouton = tk.Button(root, text='Valider', command=palindrome)...

    Et j'ai remplacé la fonction palindrome par celle-là :

    Code phyton : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def palindrome():
        x = Entree.get()
        x_inverse = x[::-1]
     
        if x == x_inverse:
            print("C'est un palindrome")
        else:
            print("Ce n'est pas un palindrome")

    C'est une manière parmi d'autres...

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup de votre temps et de votre aide !
    Entre temps j'ai réussi à trouver une solution pour faire marcher le programme comme je voulais et cela se rapproche assez de votre solution

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    from tkinter import *
    import tkinter as tk
    import tkinter.messagebox
    import tkinter.filedialog
    from PIL import Image, ImageTk
     
     
    car = {                  # on ouvre un dictionnaire pour standardiser l'écriture de la chaine (supprimer les accents, les majuscules, la ponctuation et les escpaces)
                "à" : "a",
                "ä" : "a",
                "â" : "a",
                "ç" : "c",
                "é" : "e",
                "è" : "e",
                "ë" : "e",
                "ï" : "i",
                "ô" : "o",
                "ù" : "u",
                "ü" : "u",
                "û" : "u",
                " " : "",
                "-" : "",
                "," : "",
                "'" : "",
                "?" : "",
                "!" : "",
                "." : ""
        }
     
    #CRéation de la fenetre
    root = tk.Tk() #On initialise la fenetre
    root.title('Palindrome ?')#On nomme la fenetre
     
     
    #Création de la fonction de remplacement des caracteres sepciaux
     
    def palindrome():
        x = palind.get()
        x = x.lower()  # tout mettre en minuscule
        for caracInitial,caracFinal in car.items(): # permet de remplacer les caractère initials (avec accents,..) par leur équivalents (sans accents, sans majuscule,...)
                x = x.replace(caracInitial,caracFinal)
        for i in range(len(x)//2):  # on divise la longueur du caratère par 2,
            if x[i] != x[-i-1]: # on regarde si le caractère de rang i est différent du caractère de rang –i-1
                palind1 = tk.PhotoImage(file="palind2.png")
                etnon = tk.Label(root, image=palind1)
                etnon.place(x=370, y=400, anchor='w')
                print("Ce n'est pas un palindrome")
            else:
                palindno1 = tk.PhotoImage(file="palind3.png")
                bravo = tk.Label(root, image=palindno1)
                bravo.place(x=368, y=400, anchor='w')
                print("C'est un palindrome")
     
     
    #Creation de l'arriere plan et de la taille de la fenetee
    image1 = tk.PhotoImage(file="Livre.png")
    w = image1.width()
    h = image1.height()
    root.geometry("%dx%d+0+0" % (w, h))
    fond = tk.Label(root, image=image1)
    fond.pack()
     
     
     
    #Création de du champ de saisie
    palind = tk.StringVar()
    Entree = tk.Entry(root, textvariable= palind)
    Entree.focus_set()
    Entree.place(x=363, y=470, anchor='w')
     
     
    #Creation du bouton de validation
    Bouton = tk.Button(root, text ='Valider', command = palindrome)
    Bouton.place(x=400, y=500, anchor='w')
     
     
     
     
    root.mainloop()


    Voilà ce que j'ai fais.



    Tout le code en lui même marche maintenant j'ai simplement un problème d'affichage. Dans la fonc palindrome, je décide d'afficher un label avec une image selon le résultat du test mais peu importe le résultat l'image s'affiche bien mais c'est un rectangle tout blanc.....


    Voilà ce que la fenetre affiche:

    Nom : 1572351070-capture2.png
Affichages : 705
Taille : 605,7 Ko


    Merci

Discussions similaires

  1. Demineur avec tkinter : problème d'affichage
    Par arcanis112 dans le forum Programmation multimédia/Jeux
    Réponses: 6
    Dernier message: 26/11/2018, 19h48
  2. Problème d'affichage simple avec grid() - tkinter
    Par Anonyme1784 dans le forum Général Python
    Réponses: 0
    Dernier message: 20/07/2017, 05h57
  3. Problème d'affichage d'images avec Tkinter
    Par flobos dans le forum Général Python
    Réponses: 3
    Dernier message: 14/03/2016, 16h35
  4. [Python 3.X] Problème d'affichage de label avec tkinter
    Par flobos dans le forum Général Python
    Réponses: 3
    Dernier message: 10/03/2016, 09h45
  5. problème d'affichage dune image avec Tkinter
    Par destroy51 dans le forum GUI
    Réponses: 14
    Dernier message: 29/03/2014, 13h40

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