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 dans un canvas


Sujet :

Tkinter Python

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2006
    Messages : 96
    Points : 72
    Points
    72
    Par défaut afficher une image dans un canvas
    Bonjour,

    j'essaie de coder un jeu de carte (la manille) en Tkinter.
    Je me prend la tete depuis un bon moment sur l'affichage d'une image :
    voila mon programme, qui pour l'instant ne fait pas grand chose mais est censé afficher une image dans le canvas :
    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
    # -*- coding: cp1252 -*-
    from Tkinter import *
    from random import *
     
    couleurs=['pique','carreau','coeur','trefle']
    nombres=[7,8,9,11,12,13,1,10]
    points={10:5,13:3,12:2,11:1,1:4,7:0,8:0,9:0}
     
    class Jeu:
        def __init__(self):
            self.fen=Tk()
            self.can=Canvas(self.fen,height=600,width=800)
            self.can.pack()
            Button(self.fen,text="quitter",command=self.fen.quit).pack()
            self.joueur=Joueur([])
            self.joueur1=Joueur_IA([],'gauche')
            self.joueur2=Joueur_IA([],'droite')
            self.joueur3=Joueur_ami([])
            self.partie()
            ###test###
            a=Carte("images/1coeur.GIF","")
            a.afficher(self.can)
            ###fin###
            self.fen.mainloop()
            self.fen.destroy()
        def partie(self):
            self.jeu=[]
            for i in nombres:
                for j in couleurs:
                    self.jeu.append((i,j))
            self.distribuer()
        def distribuer(self):
            for i in range(8):
                a=self.jeu[randrange(len(self.jeu))]###element au hasard dans self.jeu
                carte=Carte(str(a[0])+a[1],a[0])###creation d'une instance de Carte
                self.joueur.jeu.append(carte)###on ajoute cette instance au jeu d'un joueur
                self.jeu.remove(a)
     
                a=self.jeu[randrange(len(self.jeu))]
                carte=Carte(str(a[0])+a[1],a[0])
                self.joueur1.jeu.append(carte)
                self.jeu.remove(a)
     
                a=self.jeu[randrange(len(self.jeu))]
                carte=Carte(str(a[0])+a[1],a[0])
                self.joueur2.jeu.append(carte)
                self.jeu.remove(a)
     
                a=self.jeu[randrange(len(self.jeu))]
                carte=Carte(str(a[0])+a[1],a[0])
                self.joueur3.jeu.append(carte)
                self.jeu.remove(a)
     
    class Carte:
        def __init__(self,chemin,val):
            self.chemin=chemin
            self.val=val
        def afficher(self,can):
            a=PhotoImage(file=self.chemin)
            can.create_image(0,0,image=a)
     
    class Joueur:
        def __init__(self,jeu):
            self.jeu=jeu
     
    class Joueur_IA:
        def __init__(self,jeu,cote):
            self.jeu=jeu
            self.cote=cote
     
    class Joueur_ami:
        def __init__(self,jeu):
            self.jeu=jeu
    a=Jeu()
    jai fait un petit test qui marche a peu près (il m'affiche bien un rectangle blanc au bon endroit mais les motifs de l'image n'apparaissent pas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from Tkinter import *
     
    fen=Tk()
    can=Canvas(fen,height=600,width=800)
    can.pack()
    a=PhotoImage(file="1coeur.GIF")
    can.create_image(0,0,image=a)
    fen.mainloop()
    Si quelqu'un pouvait m'expliquer pourquoi dans un cas mon image ne s'affiche pas et dans l'autre elle s'affiche mal ?
    Merci d'avance et désolé pour ce paquet de code

  2. #2
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Tu dois ajouter une référence à ton image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        def afficher(self,can):
            a=PhotoImage(file=self.chemin)
            can.img=a
            can.create_image(0,0,image=a,anchor=NW)
    Si tu as des problèmes d'affichage, utilise PIL

Discussions similaires

  1. Tkinter : afficher une image dans un canvas
    Par nicolivier dans le forum Tkinter
    Réponses: 4
    Dernier message: 28/03/2013, 21h20
  2. Réponses: 3
    Dernier message: 10/03/2012, 08h27
  3. Afficher une image dans un canvas
    Par laurentze dans le forum Débuter
    Réponses: 5
    Dernier message: 21/01/2010, 10h02
  4. Afficher une image dans un état
    Par Invité1 dans le forum IHM
    Réponses: 8
    Dernier message: 23/09/2009, 14h59
  5. afficher une image dans un canvas
    Par alex.blais dans le forum Tkinter
    Réponses: 4
    Dernier message: 08/12/2007, 18h29

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