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 :

Créer deux images dans un canvas dont une en fond d'écran


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Créer deux images dans un canvas dont une en fond d'écran
    Bonjour,
    J'ai crée une interface rapide qui a une image en fond grâce au code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    image = PIL.Image.open(carte_de_fond)
    w,h=image.size
    if w>1100:
        image=image.resize((1100,int(h*1100/w)),PIL.Image.ANTIALIAS)
        w,h=image.size
    if h>700:
        image=image.resize((int(w*700/h),700),PIL.Image.ANTIALIAS)
        w,h=image.size
    photo = ImageTk.PhotoImage(image,master=fen)
    can.create_image(w/2,h/2,image=photo)
    celle-ci s'affiche très bien vu que je l'ai redimensionnée pour qu'elle soit à la taille du canvas.
    Le problème est que cette interface est une carte qui doit pouvoir afficher un groupe. J'ai donc besoin d'une seconde image.
    J'ai donc utilisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    image=PIL.Image.open(image_groupe)
    wtp,htp=image.size
    if wtp>100:
          image=image.resize((100,int(htp*100/wtp)),PIL.Image.ANTIALIAS)
          wtp,htp=image.size
    if htp>60:
          image=image.resize((int(wtp*60/htp),60),PIL.Image.ANTIALIAS)
          wtp,htp=image.size
    photo = ImageTk.PhotoImage(image,master=fen)
    groupe_joueurs.canvas=can.create_image(int(Y[0]),int(Y[1]),image=photo)
    Y étant une liste de deux variable donnant la position de l'image à mettre.
    groupe_joueurs est une classe qui possède un attribut canvas.
    can est le canvas créé.
    fen est la fenetre principale.
    Le problème est que j'ai toujours ma première image mais la seconde ne s'affiche pas par dessus. Merci d'avance pour vos solutions.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 329
    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 329
    Points : 36 848
    Points
    36 848
    Par défaut
    Salut,

    Citation Envoyé par Simploïd Voir le message
    Le problème est que j'ai toujours ma première image mais la seconde ne s'affiche pas par dessus. Merci d'avance pour vos solutions.
    Si vous ne postez pas un code qui permette de reproduire le problème constaté, difficile de comprendre pourquoi vous constatez cela: çà devrait fonctionner pourvu que ce soit le même Canvas, que la deuxième image soit ajoutée après celle du fond et que les images restent référencées.
    note: ce n'est pas le cas avec le code que vous montrez puisque vous écrasez image, photo... mais alors on ne devrait voir que la 2nd image.

    - W

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si vous ne postez pas un code qui permette de reproduire le problème constaté, difficile de comprendre pourquoi vous constatez cela: çà devrait fonctionner pourvu que ce soit le même Canvas, que la deuxième image soit ajoutée après celle du fond et que les images restent référencées.
    - W
    alors voici le code "utile":
    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    def fenetre_principale(ouvert=False):
        if not ouvert:
            globals()["groupe_joueurs"]=groupe()
     
        globals()["music"]=False
        globals()["fen"]=Tk()
        fen.title("carte monde")
        globals()["listeframe"]=[]
        listeframe.append(Frame(fen))
        listeframe[0].grid(row=1,column=2)
        listeframe.append(Frame(fen))
        listeframe[1].grid(row=1,column=3)
     
        image = PIL.Image.open(carte_de_fond)
     
        w,h=image.size
        if w>1100:
            image=image.resize((1100,int(h*1100/w)),PIL.Image.ANTIALIAS)
            w,h=image.size
        if h>700:
            image=image.resize((int(w*700/h),700),PIL.Image.ANTIALIAS)
            w,h=image.size
     
        photo = ImageTk.PhotoImage(image,master=fen)
        globals()["can"]=Canvas(fen,width=w,height=h)
        can.create_image(w/2,h/2,image=photo)
        can.grid(row=1,column=1)
     
        globals()["listepoint"]=[]
        mon_fichier=open(fichier_des_cartes_et_musiques, "r")
        text=mon_fichier.read()
        changer_liste(text)
        mon_fichier.close()
     
        globals()["listebouton"]=[]
        listebouton.append(Button(listeframe[0],text="enregistrer",command=enregistrer))
        listebouton.append(Button(listeframe[0],text="voir les joueurs",command=voir_joueurs))
     
        for i in range(len(listebouton)):
            listebouton[i].grid(row=i+1,column=0)
        listebouton.append(Button(fen,text="X",command=quitter))
        listebouton[-1].grid(row=0,column=10)
     
        globals()["listeselection"]=[]
        globals()["valueselection"]=StringVar(fen,"0")
        listeselection.append(Radiobutton(listeframe[1],text="déplacer le groupe",value=0,variable=valueselection))
        listeselection.append(Radiobutton(listeframe[1],text="parcourir la carte",value=1,variable=valueselection))
        listeselection.append(Radiobutton(listeframe[1],text="ajouter un point",value=2,variable=valueselection))
        listeselection.append(Radiobutton(listeframe[1],text="enlever un point",value=3,variable=valueselection))
        for i in range(len(listeselection)):
            listeselection[i].grid(row=i+1,column=0)
     
        globals()["listelabel"]=[]
     
        globals()["listeentry"]=[]
     
        globals()["listevariable"]=[]
     
        can.bind("<Button-1>",afficher)
     
        fen.mainloop()
        return
     
    def changer_liste(texte):
        if texte!="":
            X=texte.split(";")
            if X[-1]=='':
                del X[-1]
            if len(X)!=0:
                Y=X[0].split("--")
                groupe_joueurs.x=int(Y[0])
                groupe_joueurs.y=int(Y[1])
    #            groupe_joueurs.canvas=can.create_rectangle(int(Y[0])-rondeur,int(Y[1])-rondeur,int(Y[0])+rondeur,int(Y[1])+rondeur,fill="yellow")
                image=PIL.Image.open(image_groupe)
                wtp,htp=image.size
                if wtp>100:
                    image=image.resize((100,int(htp*100/wtp)),PIL.Image.ANTIALIAS)
                    wtp,htp=image.size
                if htp>60:
                    image=image.resize((int(wtp*60/htp),60),PIL.Image.ANTIALIAS)
                    wtp,htp=image.size
                photo = ImageTk.PhotoImage(image,master=fen)
                groupe_joueurs.canvas=can.create_image(int(Y[0]),int(Y[1]),image=photo,anchor = NW)
                del X[0]
            for i in X:
                Y=i.split("--")
                listepoint.append(point(x=int(Y[0]),y=int(Y[1]),image=Y[2],musique=Y[3],nom=Y[4]))
        for i in range(len(listepoint)):
            listepoint[i].canvas=can.create_oval(listepoint[i].x-rondeur,listepoint[i].y-rondeur,listepoint[i].x+rondeur,listepoint[i].y+rondeur,fill="red")
        return
    Bon, c'est la partie du code utile, le reste est surement inutile. On voit bien que la seconde image est insérée après la première mais elle ne s'affiche pas, je ne sais pas s'il faut update tout ça pour que ça s'affiche mais je ne pense pas vu que j'ai créé des cercles (après l'image qui ne s'affiche pas) qui apparaissent sur le canvas.

    PS: je sais que mon code n'est pas joli-joli mais j'ai fait avec les moyens du bord, je n'ai pas eu de cours si ce n'est ceux sur internet.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 329
    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 329
    Points : 36 848
    Points
    36 848
    Par défaut
    Salut,

    Citation Envoyé par Simploïd Voir le message
    On voit bien que la seconde image est insérée après la première mais elle ne s'affiche pas
    Un code qui permette de reproduire le problème c'est pas un peu plus d'extraits de code! Prenez le temps de réduire votre code à quelques dizaines de lignes juste assez pour reproduire le problème

    Citation Envoyé par Simploïd Voir le message
    PS: je sais que mon code n'est pas joli-joli mais j'ai fait avec les moyens du bord, je n'ai pas eu de cours si ce n'est ceux sur internet.
    Ah ben, tant que tout fonctionne et que personne d'autre que vous n'a à lire votre prose... tout va bien. Dès que vous demandez de l'aide, il faut montrer ce qu'on à fait et espérer qu'on voudra bien vous lire: c'est pas gagné!

    - W

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/03/2016, 20h22
  2. Insérer une image dans un canvas en XAML
    Par BlackStorm dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/07/2008, 15h39
  3. Deux images dans une même fenêtre
    Par ambessa dans le forum OpenCV
    Réponses: 3
    Dernier message: 23/06/2008, 17h54
  4. afficher une image dans un canvas
    Par alex.blais dans le forum Tkinter
    Réponses: 4
    Dernier message: 08/12/2007, 18h29
  5. afficher une image dans un canvas
    Par Arrakis dans le forum Tkinter
    Réponses: 1
    Dernier message: 05/03/2007, 13h22

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