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 :

Un problème dans les interfaces graphique de python


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Un problème dans les interfaces graphique de python
    Bonjour , s'il vous plait j'ai un probleme avec python :
    jé programmé 2 scripts 1 contient une boutton et une image, ce boutton fait l'appel à un autre script qui lui aussi contient une image, le probléme est ds le 2éme script il n'affiche pas l'image et il me donne une erreur voilà les deux script:

    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
    ###Premier script: Projet.py
     
    from Tkinter import *;
    from moha import *;
     
    fen1=Tk();
    fen1.title("Le menu principal")
    Button(fen1,text='Le PGCD',command=interface_pgcd).grid(row =2, column =0, columnspan =2, padx =10, pady =5)
    can = Canvas(fen1, width =350, height =200, bg ='white')
    phot = PhotoImage(file ='bon.gif')
    item = can.create_image(175, 100, image =phot)
    can.grid(row =0, column =3, rowspan =4, padx =10, pady =5)
    fen1.mainloop();
    fen1.destroy();
     
     
     
    #Le deuxième script: moha.py
     
    from Tkinter import *
    from Rho import * #contient la fonction pgcd
     
    def evaluer_pgcd(event):
        #global entr1,entr2,chaine
        a=int(entr1.get())
        a= pgcd(int(entr2.get()),a)
        chaine.configure(text = "Resultat            =            "+str(a))
    def interface_pgcd():
        global entr1,entr2,chaine,fen2;
        fen2 = Tk()
        #fen2.protocol ( "WM_DELETE_WINDW", fen2.quit) 
        fen2.title("Le pgcd")
        txt1 = Label(fen2, text = 'Premier variable :')
        txt2 = Label(fen2, text = 'Second variable :')
        entr1 = Entry(fen2)
        entr2 = Entry(fen2)
        txt1.grid(row =0, sticky =E)
        txt2.grid(row =1, sticky =E)
        entr1.grid(row =0, column =1)
        entr2.grid(row =1, column =1)
        entr2.bind("<Return>", evaluer_pgcd)
        chaine = Label(fen2)
        chaine.grid(row =3, column=1, sticky =E)
        can1 = Canvas(fen2, width =380, height =140, bg ='white')
        photo = PhotoImage(file ='pgcd.gif')
        item = can1.create_image(190, 70, image =photo)
        can1.grid(row =2, column =0, columnspan =2, padx =10, pady =5)
     
        fen2.mainloop()
    s'il vous aidez moi

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    et l'erreur c'est ...?

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    il me donne erreur si je veux afficher l'image dans les deux qui sont représentés par ces deux script. Voilà l'erreur qu'il s'affiche


    TclError: image "pyimage2" doesn't exist

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    l'erreur tiend sur une seule ligne ?

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    voilà tous ce qu'il me donne comme erreur



    Exception in Tkinter callback
    Traceback (most recent call last):
    File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args)
    File "/home/mohamed/moha.py", line 30, in interface_pgcd
    item = can1.create_image(190, 70, image =photo)
    File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 2159, in create_image
    return self._create('image', args, kw)
    File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 2150, in _create
    *(args + self._options(cnf, kw))))
    TclError: image "pyimage2" doesn't exist

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Utilise Toplevel, ça évite de se retrouver avec 2 mainloop. c'est pas terrible, la preuve.
    Le dic empêche l'image d'être détruite à la fin de la fonction:

    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
     
    from Tkinter import *
     
     
    def evaluer_pgcd(event):
        #global entr1,entr2,chaine
        a=int(entr1.get())
        a= pgcd(int(entr2.get()),a)
        chaine.configure(text = "Resultat            =            "+str(a))
     
    dic = {}
    def interface_pgcd():
     
        global entr1,entr2,chaine,fen2;
        fen2 = Toplevel()
     
        #fen2.protocol ( "WM_DELETE_WINDW", fen2.quit) 
        fen2.title("Le pgcd")
        txt1 = Label(fen2, text = 'Premier variable :')
        txt2 = Label(fen2, text = 'Second variable :')
        entr1 = Entry(fen2)
        entr2 = Entry(fen2)
        txt1.grid(row =0, sticky =E)
        txt2.grid(row =1, sticky =E)
        entr1.grid(row =0, column =1)
        entr2.grid(row =1, column =1)
        entr2.bind("<Return>", evaluer_pgcd)
        chaine = Label(fen2)
        chaine.grid(row =3, column=1, sticky =E)
        can1 = Canvas(fen2, width =380, height =140, bg ='white')
        photo = PhotoImage(file ='pgcd.gif')
        dic["photo"] = photo
     
        item = can1.create_image(190, 70, image =photo)
        can1.grid(row =2, column =0, columnspan =2, padx =10, pady =5)

  7. #7
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    s'il vous plait à quoi sert la liste dic et c'est quoi la difference entre toplevel et tk??

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    comme expliqué plus haut, le dic sert à stoquer l'image dans un objet qui ne sera pas détruit à la fin la fonction. En effet python détruit automatiquement les objets créés dans une fonction à la fin de celle-ci. Si tu ne mets pas le dic, l'image est bien affichée, mais toute suite effacée, à la fin de la fonction.

    Pour la 2ème question, Tk() est utilisé pour la fenêtre principale, il est recommandé de n'avoir qu'une seule instance Tk(). Si tu veux afficher de nouvelles fenêtre, Toplevel est là pour ça.

  9. #9
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    merci beucoup pour la reponse le pb est résolu et jé bien compri vos réponses

  10. #10
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut Structures de données
    Citation Envoyé par mohamed1985 Voir le message
    s'il vous plait à quoi sert la liste dic
    bonjour,

    attention, 'dic' ici n'est pas une liste, mais un dictionnaire. cela ne s'utilise pas du tout de la même façon.

    syntaxe :
    - les liste : [ ]
    - les tuples : ( )
    - les dictionnaires : { }

    un bon lien ici pour comprendre les différences : http://www.swaroopch.com/notes/Python_fr:Structures_De_Données

    edit : et ici aussi : http://diveintopython.adrahon.org/na...pes/index.html

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

Discussions similaires

  1. CheckButton, ComboBox dans une interface graphique Python
    Par noramokh dans le forum Général Python
    Réponses: 9
    Dernier message: 14/04/2014, 12h58
  2. Problème d'insertion d'images dans mon interface graphique
    Par nini_python dans le forum Tkinter
    Réponses: 8
    Dernier message: 03/08/2012, 19h59
  3. Relier les champs de deux tables dans une interface graphique
    Par laurentlorient dans le forum Débuter
    Réponses: 1
    Dernier message: 26/04/2009, 22h34
  4. les actions dans l'interface graphique
    Par bouhmid86 dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 08/03/2009, 19h23
  5. les matrices dans un interface graphique
    Par SavoitTout dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 29/04/2008, 21h38

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