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 :

Afficher une image jpg


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut Afficher une image jpg
    Bonjour,
    j'ai réussi à afficher une image JPG avec Tkinter mais le problème c'est que l'image n'est pas entièrement affiché, on ne voit même pas un quart de l'image alors que je voudrais l'afficher en entier.
    Voici un exemple de code :

    from tkinter import *
    from PIL import Image, ImageTk
    fenetre = Tk()
    image = Image.open("image.jpg")
    ara = ImageTk.PhotoImage(Image.open("image.jpg"))
    canvas = Canvas(fenetre)
    canvas.place(x=600,y=150)
    canvas.create_image(50,50,image=ara)
    fenetre.mainloop()

    Je pense que la ligne qui pose problème est la suivante : canvas.create_image(50,50,image=ara).
    Dès que je modifie les nombres 50 et 50, on voit une autre partie de l'image s'afficher mais jamais l'image en entier. Comment faire ?
    SVP
    Merci

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Je pense que ta réponse est ici: http://python.developpez.com/faq/?page=Canvas

  3. #3
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut
    Cela ne répond pas vraiment à ma question

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MVP Chacal Voir le message
    Bonjour,
    j'ai réussi à afficher une image JPG avec Tkinter mais le problème c'est que l'image n'est pas entièrement affiché, on ne voit même pas un quart de l'image alors que je voudrais l'afficher en entier.
    Voici un exemple de code :

    from tkinter import *
    from PIL import Image, ImageTk
    fenetre = Tk()
    image = Image.open("image.jpg")
    ara = ImageTk.PhotoImage(Image.open("image.jpg"))
    canvas = Canvas(fenetre)
    canvas.place(x=600,y=150)
    canvas.create_image(50,50,image=ara)
    fenetre.mainloop()

    Je pense que la ligne qui pose problème est la suivante : canvas.create_image(50,50,image=ara).
    Dès que je modifie les nombres 50 et 50, on voit une autre partie de l'image s'afficher mais jamais l'image en entier. Comment faire ?
    SVP
    Merci
    Bonjour,

    Essayez ceci :

    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
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from Tkinter import *
     
    from PIL import Image, ImageTk
     
    fenetre = Tk()
     
    ara = ImageTk.PhotoImage(Image.open("image.jpg"))
     
    cadre = Frame(fenetre)
     
    cadre.rowconfigure(0, weight=1)
     
    cadre.columnconfigure(0, weight=1)
     
    cadre.pack(expand=1, fill=BOTH)
     
    canvas = Canvas(cadre)
     
    canvas.grid(row=0, column=0, sticky=N+S+E+W)
     
    canvas.create_image(0, 0, image=ara)
     
    scroll_x = Scrollbar(cadre, orient=HORIZONTAL, command=canvas.xview)
     
    scroll_x.grid(row=1, column=0, sticky=E+W)
     
    scroll_y = Scrollbar(cadre, orient=VERTICAL, command=canvas.yview)
     
    scroll_y.grid(row=0, column=1, sticky=N+S)
     
    canvas["xscrollcommand"] = scroll_x.set
     
    canvas["yscrollcommand"] = scroll_y.set
     
    canvas["scrollregion"] = canvas.bbox(ALL)
     
    bouton = Button(fenetre, text="Quitter", command=fenetre.quit)
     
    bouton.pack()
     
    fenetre.mainloop()
    Jouez avec les ascenseurs pour voir la totalité de l'image.

    @+.

  5. #5
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut
    Merci mais je cherche à faire un truc moins compliqué.
    Je voudrais afficher une image en entier (JPG) à un endroit précis. Il faudrait que je puisse modifier sa taille aussi. Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MVP Chacal Voir le message
    Merci mais je cherche à faire un truc moins compliqué.
    Je voudrais afficher une image en entier (JPG) à un endroit précis. Il faudrait que je puisse modifier sa taille aussi. Merci
    Il faudrait passer par PIL.Image méthodes .open(filepath) puis .resize(size) ou .thumbnail(size) et enfin passer par PIL.ImageTk pour l'intégrer dans un Tkinter.Canvas.

    Documentation :

    http://effbot.org/imagingbook/image.htm (voir .open() + .resize() + .thumbnail())

    http://effbot.org/imagingbook/imagetk.htm

    Bon courage.

    @+.

  7. #7
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut
    from tkinter import *
    from PIL import Image, ImageTk

    fenetre = Tk()

    im = Image.open("image.jpg")
    (L,H) = im.size

    def affiche(i,canvas):
    logo = Label(fenetre, image=i)
    canvas.create_image(L,H,image=i)
    return


    logo = ImageTk.PhotoImage(Image.open("image.jpg"))
    canvas = Canvas(fenetre)
    Button(fenetre,text="Générer l'image",command=lambda : affiche(logo, canvas)).place(x=700, y=50)
    canvas.place(x=600,y=200)

    fenetre.mainloop()


    Même en remplacant le logo par im, ca ne fonctionne pas ...
    Je vois pas trop comment faire. Merci

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MVP Chacal Voir le message
    from tkinter import *
    from PIL import Image, ImageTk

    fenetre = Tk()

    im = Image.open("image.jpg")
    (L,H) = im.size

    def affiche(i,canvas):
    logo = Label(fenetre, image=i)
    canvas.create_image(L,H,image=i)
    return


    logo = ImageTk.PhotoImage(Image.open("image.jpg"))
    canvas = Canvas(fenetre)
    Button(fenetre,text="Générer l'image",command=lambda : affiche(logo, canvas)).place(x=700, y=50)
    canvas.place(x=600,y=200)

    fenetre.mainloop()


    Même en remplacant le logo par im, ca ne fonctionne pas ...
    Je vois pas trop comment faire. Merci
    Bonjour,
    Avez-vous tenu compte de mes indications ?
    Oui ? Où ça ?

  9. #9
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut
    Oui, j'ai modifié un peu le début mais maintenant il n'affiche plus rien. Dans un premier temps, j'aimerais faire apparaitre l'image dans sa taille normale puis dans un second temps, modifier sa taille. Merci

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MVP Chacal Voir le message
    Oui, j'ai modifié un peu le début mais maintenant il n'affiche plus rien. Dans un premier temps, j'aimerais faire apparaitre l'image dans sa taille normale puis dans un second temps, modifier sa taille. Merci
    Désolé, mais je ne vois ni Image.resize() ni Image.thumbnail() dans votre code.

    Comprenez-vous une doc écrite en anglais ?

    Et puis, pourquoi utilisez-vous sans cesse widget.place() au lieu de widget.pack() ou widget.grid() ?

    Y a-t-il une raison suffisamment valable pour cela ?

    Je vous rappelle en passant que vous êtes là pour chercher/apprendre pas pour qu'on vous mette la nourriture toute cuite dans la bouche.

    Svp, sollicitez moins, cherchez plus.
    @+.

  11. #11
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut
    J'utilise les .place car c'est beaucoup plus précis que les .pack ou autre. Ca permet de mettre le widget dans un endroit précis

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MVP Chacal Voir le message
    J'utilise les .place car c'est beaucoup plus précis que les .pack ou autre. Ca permet de mettre le widget dans un endroit précis
    Je n'ai pas de vue d'ensemble de ce que vous voulez faire, mais bon, si vous pensez que c'est plus pertinent, OK, soit.

    En général, on évite de recourir à .place() qui est considéré "rigide" par rapport à .pack() et à .grid().

    En fait, on essaie souvent cette logique : tant que .pack() répond au besoin, on utilise .pack(), si ça n'est pas suffisant, on utilise .grid() à la place et si c'est toujours pas suffisant, on utilise .place() en dernier recours.

    Personnellement, j'ai rarement eu l'occasion de "forcer" les widgets à se placer à des coordonnées fixes avec .place(), bien que j'utilise Tkinter depuis 10 ans à présent.

    Mais bon, il se peut que ce soit totalement justifié, je n'en sais rien.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MVP Chacal Voir le message
    from tkinter import *
    from PIL import Image, ImageTk

    fenetre = Tk()

    im = Image.open("image.jpg")
    (L,H) = im.size

    def affiche(i,canvas):
    logo = Label(fenetre, image=i)
    canvas.create_image(L,H,image=i)
    return


    logo = ImageTk.PhotoImage(Image.open("image.jpg"))
    canvas = Canvas(fenetre)
    Button(fenetre,text="Générer l'image",command=lambda : affiche(logo, canvas)).place(x=700, y=50)
    canvas.place(x=600,y=200)

    fenetre.mainloop()


    Même en remplacant le logo par im, ca ne fonctionne pas ...
    Je vois pas trop comment faire. Merci
    Note : pour insérer du code source dans vos messages, vous avez un bouton "#" dans la barre d'outils de l'éditeur de messages du forum (à côté de la bulle de BD).

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MVP Chacal Voir le message
    J'utilise les .place car c'est beaucoup plus précis que les .pack ou autre. Ca permet de mettre le widget dans un endroit précis
    Voici un exemple de code utilisant .pack() :

    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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    from tkinter import *
    from PIL import Image, ImageTk
     
    def affiche():
        canvas.create_image(0, 0, image=logo, anchor=NW)
     
    fenetre = Tk()
     
    Button(fenetre, text="Générer l'image", command=affiche).pack()
     
    canvas = Canvas(fenetre)
    canvas.pack()
     
    Button(fenetre, text="Quitter", command=fenetre.quit).pack()
     
    photo = Image.open("image.jpg")
     
    photo.thumbnail((400, 400), Image.BICUBIC)
     
    logo = ImageTk.PhotoImage(photo)
     
    fenetre.mainloop()

  15. #15
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut
    Merci ça fonctionne !
    Par contre au niveau de la ligne : photo.thumbnail((400, 400), Image.BICUBIC).
    Que signifie le BICUBIC ?

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MVP Chacal Voir le message
    Merci ça fonctionne !
    Par contre au niveau de la ligne : photo.thumbnail((400, 400), Image.BICUBIC).
    Que signifie le BICUBIC ?
    C'est l'algorithme d'interpolation de l'image : pour réduire ou pour agrandir une image, on doit mélanger les pixels afin d'obtenir un rendu final qui soit correct.

    Selon la qualité du rendu que l'on souhaite, il existe plusieurs algorithmes à appliquer.

    Vous trouverez la liste de ces algorithmes dans la documentation suivante :

    http://effbot.org/imagingbook/image.htm

    au paragraphe "resize".

    Si votre problème est résolu, merci de cliquer sur Résolu en bas de page.

Discussions similaires

  1. Afficher une image.jpg
    Par mansgueg dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 26/04/2010, 00h24
  2. Réponses: 1
    Dernier message: 26/01/2008, 17h44
  3. Afficher une image JPG qui se trouve dans une bdd
    Par Harry dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/02/2004, 10h51
  4. Charger et afficher une image jpg avec les mfc
    Par glop - pas glop dans le forum MFC
    Réponses: 3
    Dernier message: 11/02/2004, 18h59
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

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