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 :

[Tkinter et PIL] L'image disparait....... [Fait]


Sujet :

Tkinter Python

  1. #1
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut [Tkinter et PIL] L'image disparait.......
    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
    # -*- coding: cp1252 -*-
    import Tkinter as tk
    import Image
    import ImageTk
    import os
     
    #fonction d'affichage de l'image a traiter
    def affichimg():
        global can,app,a
        image=Image.open('image.jpg')
        x,y=image.size
        if x<y:
            X,Y=int((x*600.0)/y),600
     
        elif x>y:
            X,Y=800,int((800*y)/x)
     
        image=image.resize((X,Y),Image.BICUBIC)
        photo=ImageTk.PhotoImage(image)
     
        can.destroy()    
        can=tk.Canvas(app,height=600,width=800,bg='black',relief=tk.FLAT,border=0)
        can.grid(rowspan=10,columnspan=10,
                 row=1,column=1,pady=5,padx=5)
     
        img=can.create_image(400,300,image=photo)
     
        print x,y
        print X,Y
     
    #Programme Principale
     
    app=tk.Tk()
    app.title('CompoGR')
    app.configure(bg='black')
     
    ouvrir=tk.Menubutton(text='Ouvrir')
    ouvrir.grid(row=1,column=0)
    menopen=tk.Menu(ouvrir)
    menopen.add_command(label='Image',command=affichimg)
    menopen.add_command(label='Travail en cours')
    ouvrir.configure(bg='black',fg='white',menu=menopen)
     
    option=tk.Menubutton(text='Options')
    option.grid(row=2,column=0)
    menop=tk.Menu(option)
    menop.add_command(label='Paramétres')
    menop.add_command(label='A Propos')
    menop.add_command(label='Quitter',command=app.quit)
    option.configure(bg='black',fg='white',menu=menop)
     
    can=tk.Canvas(app,height=600,width=800,bg='black',relief=tk.FLAT,border=0)
    can.grid(rowspan=10,columnspan=10,
             row=1,column=1,pady=5,padx=5)
     
    tk.Button(app,text='Afficher Image',command=affichimg,
              width=10,bg='dark grey').grid(row=11,column=10,
                                                       padx=5,pady=5,sticky=tk.S)
     
     
     
    #gestionnaire d'évènement
    app.mainloop()
    app.destroy()
    Mon soucis est que mon image s'affiche mais disparait aussitot.
    si je ferme mon appli (Option >> Fermer), l'interface Tk se ferme mais il apparait qu'un nouveau process reste en éxécution dans la console!?

    J'ai changé mon code pour afficher 'image' a la place de 'imaff' (pensant que ca venait de l'utilisation de 'resize()') mais le résultat est pareil.

    quelqu'un peut il m'aider?

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    Bon coté, deuxiéme process c'est réglé.

    mais coté affichage de l'image, c'est pareil, elle disparait aussitot.

    ??????

  3. #3
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    elle disparaît parce que photo est détruite par le garbage de Python à la fin de la fonction et donc img pointe sur None
    Pour que la photo soit conservée, il faut que l'image soit dans un conteneur qui n'est pas détruit (un objet par exemple, un dictionnaire)

    par exemple, ceci fonctionnera

    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
    # -*- coding: cp1252 -*- 
    import Tkinter as tk 
    import Image 
    import ImageTk 
    import os 
     
    dic={} ## dictionnaire ajoutée
    #fonction d'affichage de l'image a traiter 
    def affichimg(): 
        global can,app,a 
        image=Image.open('image.jpg') 
        x,y=image.size 
        if x<y: 
            X,Y=int((x*600.0)/y),600 
     
        elif x>y: 
            X,Y=800,int((800*y)/x) 
     
        image=image.resize((X,Y),Image.BICUBIC) 
        photo=ImageTk.PhotoImage(image)
        dic['photo']=photo  ## on sauvegarde dans le dico l'instance
     
        can.destroy()    
        can=tk.Canvas(app,height=600,width=800,bg='black',relief=tk.FLAT,border=0) 
        can.grid(rowspan=10,columnspan=10, 
                 row=1,column=1,pady=5,padx=5) 
     
        img=can.create_image(400,300,image=photo) 
     
        print x,y 
        print X,Y 
     
    #Programme Principale 
     
    app=tk.Tk() 
    app.title('CompoGR') 
    app.configure(bg='black') 
     
    ouvrir=tk.Menubutton(text='Ouvrir') 
    ouvrir.grid(row=1,column=0) 
    menopen=tk.Menu(ouvrir) 
    menopen.add_command(label='Image',command=affichimg) 
    menopen.add_command(label='Travail en cours') 
    ouvrir.configure(bg='black',fg='white',menu=menopen) 
     
    option=tk.Menubutton(text='Options') 
    option.grid(row=2,column=0) 
    menop=tk.Menu(option) 
    menop.add_command(label='Paramétres') 
    menop.add_command(label='A Propos') 
    menop.add_command(label='Quitter',command=app.quit) 
    option.configure(bg='black',fg='white',menu=menop) 
     
    can=tk.Canvas(app,height=600,width=800,bg='black',relief=tk.FLAT,border=0) 
    can.grid(rowspan=10,columnspan=10, 
             row=1,column=1,pady=5,padx=5) 
     
    tk.Button(app,text='Afficher Image',command=affichimg, 
              width=10,bg='dark grey').grid(row=11,column=10, 
                                                       padx=5,pady=5,sticky=tk.S) 
     
     
     
    #gestionnaire d'évènement 
    app.mainloop() 
    app.destroy()

  4. #4
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    grand merci pour ces explications.

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

Discussions similaires

  1. [Source]Tatoueur d'image avec Tkinter et PIl
    Par vincent.mbg dans le forum Contribuez
    Réponses: 5
    Dernier message: 11/09/2009, 10h35
  2. [PIL] Librairie Image
    Par Corpio dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 13/04/2006, 17h40
  3. [Tkinter et Pil] afficher une image
    Par airod dans le forum Tkinter
    Réponses: 3
    Dernier message: 16/01/2006, 22h23
  4. Réponses: 4
    Dernier message: 16/12/2005, 22h52
  5. [CSS] Mon texte ou mon image disparait sous IE.
    Par KneXtasY dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 05/12/2005, 17h59

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