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 :

Fonction de fonction


Sujet :

Tkinter Python

  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut Fonction de fonction
    Bonjour,
    je réalise actuellement l'interface graphique d'un programme qui permet de cacher du texte dans une image (stéganographie). Il existe également un programme permettant de faire l'opération inverse c'est à dire décrypter une image dans laquelle du tetxe est caché.
    J'ai ainsi choisie de créer une fenêtre principale dans laquelle il y a deux boutons : un permettant d'accéder à la fenêtre pour crypter une image et un autre permettant d'accéder à la fenêtre pour décrypter une image. J'ai donc rentrer les deux fenêtres (crypter et décrypter) dans deux fonctions différentes. Le problème c'est que vous devinez que ces deux fonctions appellent d'autres fonctions qui permettent de réaliser le but du programme. Et ça Tkinter n'aime pas (les fonctions de fonctions), j'ai toujours des messages d'erreurs. J'ai essayer de mettre des lambda dans les commandes de mes fenêtre ou encore de mettre des global mais ça ne marche toujours pas ... J'aimerais avoir de l'aide. Merci
    J'ai demandé à beaucoup de personnes qui n'ont jamais eu la réponse.

    Voici un extrait de mon 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
    from tkinter import *
    import random
    from PIL import Image, ImageTk
     
     
    def fenetre_crypter():
        fenetre.destroy()
        fenetre1 = Tk()
        fenetre1.geometry('1000x500')
     
        #Clé
        clé = Label(fenetre1, text="Clé :").place(x=600,y=20)
        ligne_cle = Entry(fenetre1, width=21).place(x=640,y=20)
        bouton_aléatoire = Button(fenetre1, text="Aléatoire", command=genCleCode).place(x=785,y=16)
     
        #Texte
        indication = Label(fenetre1, text="Saisissez votre texte :").place(x=20,y=10)
        zone_texte=Text(fenetre1, width=60, height=26).place(x=20, y=30)
     
        #Bouton
        bouton_enregistrerimage = Button(fenetre1, text="Enregistrer l'image obtenue", command=sauvegarder).place(x=450,y=470)
     
        #Image
        photo = Image.open("image.jpg")
        photo.thumbnail((475,475), Image.BICUBIC)
        image = ImageTk.PhotoImage(photo)
        canvas = Canvas(fenetre1).place(x=485,y=95)
        canvas.config(height=image.height(),width=image.width())
        Button(fenetre1,text="Générer l'image",command=lambda : affiche(image, canvas)).place(x=700, y=50)    
     
        return
     
     
    def genCleCode(ligne_cle):
        cleCode = ""
        ligne_cle.delete(0,20) 
        for i in range(0,19,1):
            if i == 4 or i == 9 or i==14 :
                cleCode += "-"
            else:
                choixDuCaractere = random.randint(0,2)
                caractere = [random.randint(48,57),random.randint(65,90),random.randint(97,122)]
                cleCode += chr(caractere[choixDuCaractere])
        ligne_cle.insert("insert", cleCode) 
        return cleCode
     
    def affiche(i,canvas):
        canvas.create_image(0,0,anchor=NW,image=i)
        return
     
    fenetre = Tk()
    fenetre.geometry('1000x500')
     
     
    bouton_coder = Button(fenetre, text="Cacher un texte dans une image", command=fenetre_crypter,font=("Arial", 15)).place(x=350, y=150)
    bouton_decoder = Button(fenetre, text="Décoder une image", command=fenetre_décoder,font=("Arial", 15)).place(x=410, y=220)
    bouton_quitter = Button(fenetre, text="Quitter", command=fenetre.destroy,font=("Arial", 15)).place(x=920, y=453)
     
    fenetre.mainloop()
    PS : Lorsque j'éxécute seulement la fenêtre pour crypter (quand celle ci n'est pas une fonction), le programme marche très bien (affichage d'image ...)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MVP Chacal Voir le message
    Bonjour,
    je réalise actuellement l'interface graphique d'un programme qui permet de cacher du texte dans une image (stéganographie). Il existe également un programme permettant de faire l'opération inverse c'est à dire décrypter une image dans laquelle du tetxe est caché.
    J'ai ainsi choisie de créer une fenêtre principale dans laquelle il y a deux boutons : un permettant d'accéder à la fenêtre pour crypter une image et un autre permettant d'accéder à la fenêtre pour décrypter une image. J'ai donc rentrer les deux fenêtres (crypter et décrypter) dans deux fonctions différentes. Le problème c'est que vous devinez que ces deux fonctions appellent d'autres fonctions qui permettent de réaliser le but du programme. Et ça Tkinter n'aime pas (les fonctions de fonctions), j'ai toujours des messages d'erreurs. J'ai essayer de mettre des lambda dans les commandes de mes fenêtre ou encore de mettre des global mais ça ne marche toujours pas ... J'aimerais avoir de l'aide. Merci
    J'ai demandé à beaucoup de personnes qui n'ont jamais eu la réponse.

    Voici un extrait de mon 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
    from tkinter import *
    import random
    from PIL import Image, ImageTk
     
     
    def fenetre_crypter():
        fenetre.destroy()
        fenetre1 = Tk()
        fenetre1.geometry('1000x500')
     
        #Clé
        clé = Label(fenetre1, text="Clé :").place(x=600,y=20)
        ligne_cle = Entry(fenetre1, width=21).place(x=640,y=20)
        bouton_aléatoire = Button(fenetre1, text="Aléatoire", command=genCleCode).place(x=785,y=16)
     
        #Texte
        indication = Label(fenetre1, text="Saisissez votre texte :").place(x=20,y=10)
        zone_texte=Text(fenetre1, width=60, height=26).place(x=20, y=30)
     
        #Bouton
        bouton_enregistrerimage = Button(fenetre1, text="Enregistrer l'image obtenue", command=sauvegarder).place(x=450,y=470)
     
        #Image
        photo = Image.open("image.jpg")
        photo.thumbnail((475,475), Image.BICUBIC)
        image = ImageTk.PhotoImage(photo)
        canvas = Canvas(fenetre1).place(x=485,y=95)
        canvas.config(height=image.height(),width=image.width())
        Button(fenetre1,text="Générer l'image",command=lambda : affiche(image, canvas)).place(x=700, y=50)    
     
        return
     
     
    def genCleCode(ligne_cle):
        cleCode = ""
        ligne_cle.delete(0,20) 
        for i in range(0,19,1):
            if i == 4 or i == 9 or i==14 :
                cleCode += "-"
            else:
                choixDuCaractere = random.randint(0,2)
                caractere = [random.randint(48,57),random.randint(65,90),random.randint(97,122)]
                cleCode += chr(caractere[choixDuCaractere])
        ligne_cle.insert("insert", cleCode) 
        return cleCode
     
    def affiche(i,canvas):
        canvas.create_image(0,0,anchor=NW,image=i)
        return
     
    fenetre = Tk()
    fenetre.geometry('1000x500')
     
     
    bouton_coder = Button(fenetre, text="Cacher un texte dans une image", command=fenetre_crypter,font=("Arial", 15)).place(x=350, y=150)
    bouton_decoder = Button(fenetre, text="Décoder une image", command=fenetre_décoder,font=("Arial", 15)).place(x=410, y=220)
    bouton_quitter = Button(fenetre, text="Quitter", command=fenetre.destroy,font=("Arial", 15)).place(x=920, y=453)
     
    fenetre.mainloop()
    PS : Lorsque j'éxécute seulement la fenêtre pour crypter (quand celle ci n'est pas une fonction), le programme marche très bien (affichage d'image ...)
    Bonjour,

    La stéganographie est une technique employée par les militaires, les services secrets, les pirates et les cyber-terroristes.

    Avez-vous conscience que personne ici ne voudra vous aider dans ce domaine ?

    Si par malheur nous vous aidions, nous serions passibles du pénal au tribunal, aussi vous comprendrez qu'il vaut mieux éviter d'étaler ce genre de sujet dans ce forum.

    Merci de votre compréhension.

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut collègue cyber-terroriste,

    Je n'utilise jamais TKinter mais je vois tout de même plusieurs choses pas claires.

    Ta fonction fenetre_crypter() commence par fenetre.destroy() mais tu as lancé ta mainloop avec fenetre.mainloop() alors quid de la mainloop ?

    Et puis d'abord pourquoi la détruire ? Il s'agit de deux boutons qui ne doivent pas bien encombrer ton écran.

    La fonction qui génère le code retourne ce code, bien, mais à qui ? Au bouton qui l'a appelée ?

    Il n'y a pas le code de fenetre_décoder() mais as-tu vraiment besoin de fenêtres différentes ? Tu ne peux pas mettre deux canvas dans une seule fenêtre ?
    Regarde dans la doc de TKinter si il n'existe pas des méthodes du genre "hide()", "show()" sur les widgets qui permettent de cacher ou afficher tes widgets sans les détruire.

    Et surtout pas un mot de tout ceci à la DGSE.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Et surtout pas un mot de tout ceci à la DGSE.
    Oui, rions de bon cœur.

    Tiens, je vais inviter mes amis espagnols du 11 mars 2004 pour qu'ils puissent se gaudir de bon cœur avec nous.

    Y a jamais eu d'attentats à Bruxelles ?

    Patience, ça va venir...

  5. #5
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut
    Je suis un pirate !!! Je vais tous vous hacker !!
    C'est bon restes en chibre gaori, je fais un projet pour le lycée pas un attentat --'
    Le but de mon programme n'est pas imporant je voulais juste résoudre le problème des fonctiions de fonctions sur tkinter !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MVP Chacal Voir le message
    Je suis un pirate !!! Je vais tous vous hacker !!
    C'est bon restes en chibre gaori, je fais un projet pour le lycée pas un attentat --'
    Le but de mon programme n'est pas imporant je voulais juste résoudre le problème des fonctiions de fonctions sur tkinter !
    Même quand c'est particulièrement tentant, évitez de vous payer la tête de ceux qui vous aident. Un jour, vous aussi vous y passerez...

  7. #7
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par tarball69 Voir le message
    Même quand c'est particulièrement tentant, évitez de vous payer la tête de ceux qui vous aident. Un jour, vous aussi vous y passerez...
    Tu considères que tu l'as aidé ?

    MVP, tu as gambergé sur mes remarques ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Tu considères que tu l'as aidé ?

    MVP, tu as gambergé sur mes remarques ?
    Oui :

    http://www.developpez.net/forums/d14...g/#post7783026

    @+.

  9. #9
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Petit parcours en transversale du 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
    def fenetre_crypter():
        global image
        a.place_forget()
        b.place_forget()
     
        #Clé
        Label(fenetre, text="Clé :").place(x=600, y=20)
        ligne_cle = Entry(fenetre, width=21)
        ligne_cle.place(x=640, y=20)
        Button(fenetre, text="Aléatoire", command=lambda: genCleCode(ligne_cle)).place(x=785, y=16)
     
        #Texte
        Label(fenetre, text="Saisissez votre texte :").place(x=20, y=10)
        zone_texte = Text(fenetre, width=60, height=26)
        zone_texte.place(x=20, y=30)
     
        #Bouton
        Button(fenetre, text="Enregistrer l'image obtenue", command='sauvegarder').place(x=450, y=470) # Quiz de la fonction sauvegarder
     
        #Image
        photo = Image.open("image.jpg")
        photo.thumbnail((475, 475), Image.BICUBIC)
        image = ImageTk.PhotoImage(photo)
        canvas = Canvas(fenetre)
        canvas.place(x=485, y=95)
        canvas.config(height=image.height(), width=image.width())
        Button(fenetre, text="Générer l'image", command=lambda : affiche(image, canvas)).place(x=700, y=50)
     
    def genCleCode(ligne_cle):
        cleCode = ""
        ligne_cle.delete(0, 20) 
        for i in range(0, 19):
            if i in (4, 9, 14):
                cleCode += "-"
            else:
                choixDuCaractere = random.randint(0,2)
                caractere = [random.randint(48,57),random.randint(65,90),random.randint(97,122)]
                cleCode += chr(caractere[choixDuCaractere])
        ligne_cle.insert("insert", cleCode) 
        return cleCode
     
    def affiche(i,canvas):
        canvas.create_image(0, 0, anchor=NW, image=i)
     
    fenetre = Tk()
    fenetre.geometry('1000x500')
    a = Button(fenetre, text="Cacher un texte dans une image", command=fenetre_crypter, font=("Arial", 15))
    a.place(x=350, y=150)
    #bouton_decoder = Button(fenetre, text="Décoder une image", command=fenetre_decoder,font=("Arial", 15)).place(x=410, y=220)
    b = Button(fenetre, text="Quitter", command=fenetre.destroy, font=("Arial", 15))
    b.place(x=920, y=453)
    fenetre.mainloop()
    Note : Évitez place ici

  10. #10
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut
    Merci !
    Uatre chose, je vois que tu as mis des .place_forget() pour effacer les boutons. Est ce qu'il existerait le même type de commande pour des labels ?

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par MVP Chacal Voir le message
    Merci !
    Uatre chose, je vois que tu as mis des .place_forget() pour effacer les boutons. Est ce qu'il existerait le même type de commande pour des labels ?
    Les Labels sont des widgets comme les Button.
    On peut donc leur appliquer un ensemble de méthodes "communes" aux widgets.
    Et en cas de doute, le help est builtin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> help(tk.Label.place_forget)
    Help on function place_forget in module tkinter:
     
    place_forget(self)
        Unmap this widget.
     
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut
    Euh j'ai essayé de mettre des .place_forget() pour les label mais ca marche pas !
    AttributeError: 'NoneType' object has no attribute 'place_forget'
    PS : j'ai bien mis des .place pour afficher les labels

  13. #13
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 27
    Par défaut
    C'est bon j'ai trouvé ! Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passer en paramettre d'une fonction une fonction
    Par RoM3Ro dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/06/2006, 15h54
  2. fonction asp : fonction imprimer
    Par leclone dans le forum ASP
    Réponses: 6
    Dernier message: 23/05/2006, 13h31
  3. DLL, fonctions appelées, fonctions appelantes
    Par kantelise dans le forum Windows
    Réponses: 1
    Dernier message: 10/05/2006, 13h26
  4. [Oracle / Fonction hachage] Fonction de hachage SHA / MD5
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 8
    Dernier message: 26/01/2006, 08h58
  5. [Fonctions] Une fonction ou deux ?
    Par Évariste Galois dans le forum C++
    Réponses: 10
    Dernier message: 24/08/2005, 09h22

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