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 :

problème d'affichage d'un objet dans un canvas


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 17
    Par défaut problème d'affichage d'un objet dans un canvas
    Bonsoir, j'ai codé un échiquier et une fonction censée créer un objet et l'afficher dans cet échiquier. Problème: lorsque j'appelle cette fonction l'image n'apparait pas
    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
    from Tkinter import*
     
     
     
    echiquier=Tk()
    Largeur = 400
    Hauteur = 400
     
     
    Canevas = Canvas(echiquier, width=Largeur, height=Hauteur)
    Canevas.pack()
    for i in range(9):
            if i%2==0:
                    Canevas.create_rectangle(i*50,50,(i+1)*50,0,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,100,(i+1)*50,50)
                    Canevas.create_rectangle(i*50,150,(i+1)*50,100,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,200,(i+1)*50,150)
                    Canevas.create_rectangle(i*50,250,(i+1)*50,200,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,300,(i+1)*50,250)
                    Canevas.create_rectangle(i*50,350,(i+1)*50,300,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,400,(i+1)*50,350)
     
            else:
                    Canevas.create_rectangle(i*50,50,(i+1)*50,0)
                    Canevas.create_rectangle(i*50,100,(i+1)*50,50,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,150,(i+1)*50,100)
                    Canevas.create_rectangle(i*50,200,(i+1)*50,150,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,250,(i+1)*50,200)
                    Canevas.create_rectangle(i*50,300,(i+1)*50,250,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,350,(i+1)*50,300)
                    Canevas.create_rectangle(i*50,400,(i+1)*50,350,width=1, fill="#D3D3D3")
     
     
     
     
    def create_image(x,y,z):
     
            image = PhotoImage(file=z)
            Canevas.create_image(x,y,image)
     
     
    echiquier.mainloop()
    dans la console si je rentre par exemple create_image(25,25,tour.gif) la tour ne s'affiche pas.
    Merci de votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Par défaut
    Salut,

    tu ne peux pas appeller ta fonction dans la console tant que ton interface tk() tourne.

    A cause du root.mainloop()

    Valentin

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 761
    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 761
    Par défaut
    Salut,

    Citation Envoyé par pragm Voir le message
    dans la console si je rentre par exemple create_image(25,25,tour.gif) la tour ne s'affiche pas.
    Ca ne s'affiche pas car l'objet Photoimage sera détruit à la sortie de la fonction.... Et pour les solutions, prenez le temps de faire connaissance avec la FAQ.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 17
    Par défaut
    j'ai modifié le programme
    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
    from Tkinter import*
     
     
     
    echiquier=Tk()
    Largeur = 400
    Hauteur = 400
     
     
    Canevas = Canvas(echiquier, width=Largeur, height=Hauteur)
    Canevas.pack()
    for i in range(9):
            if i%2==0:
                    Canevas.create_rectangle(i*50,50,(i+1)*50,0,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,100,(i+1)*50,50)
                    Canevas.create_rectangle(i*50,150,(i+1)*50,100,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,200,(i+1)*50,150)
                    Canevas.create_rectangle(i*50,250,(i+1)*50,200,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,300,(i+1)*50,250)
                    Canevas.create_rectangle(i*50,350,(i+1)*50,300,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,400,(i+1)*50,350)
     
            else:
                    Canevas.create_rectangle(i*50,50,(i+1)*50,0)
                    Canevas.create_rectangle(i*50,100,(i+1)*50,50,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,150,(i+1)*50,100)
                    Canevas.create_rectangle(i*50,200,(i+1)*50,150,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,250,(i+1)*50,200)
                    Canevas.create_rectangle(i*50,300,(i+1)*50,250,width=1, fill="#D3D3D3")
                    Canevas.create_rectangle(i*50,350,(i+1)*50,300)
                    Canevas.create_rectangle(i*50,400,(i+1)*50,350,width=1, fill="#D3D3D3")
     
     
     
     
    def create_image(x,y,z):
            z=imgfile
            image = PhotoImage(file=imgfile)
            Canevas.create_image(x,y,image)
            gifsdict[imgfile]=image
     
    gifsdict={}
    echiquier.mainloop()

    ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from Tkinter import *
    from echiquier import *
    from os import*
     
     
     
     
    create_image(25,25,"tour.gif")
    ça ne marche pas

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 761
    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 761
    Par défaut
    Salut,

    Citation Envoyé par pragm Voir le message
    ça ne marche pas
    Si le programme posté est complet, l'image ne va s'afficher que si les instructions de la fonction "create_image" sont exécutées....
    Et comme cette fonction là n'est pas appelée, pourquoi/comment imaginez vous que çà puisse "marcher"?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 17
    Par défaut
    Je pensais qu'en écrivant create_image(25,25,"tour.gif") j'appelais la fonction.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 761
    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 761
    Par défaut
    Citation Envoyé par pragm Voir le message
    Je pensais qu'en écrivant create_image(25,25,"tour.gif") j'appelais la fonction.
    Il ne suffit pas de l'écrire, il faut que l'interpréteur exécute cette fonction.
    Et comme l'instruction from echiquier import * ne se terminera qu'à la sortie de echiquier.mainloop(), elle n'est jamais exécutée...
    Ce que constaterez par vous même en ajoutant un "print ('toto')" juste avant l'appel à cette fonction.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. problème d'affichage de mon Objet Glut dans Qt
    Par proc02 dans le forum GLUT
    Réponses: 4
    Dernier message: 21/06/2014, 23h11
  2. affichage d'un objet dans <logic:iterate
    Par don'de dans le forum Struts 1
    Réponses: 2
    Dernier message: 06/03/2007, 21h31
  3. Réponses: 15
    Dernier message: 04/01/2007, 08h47
  4. [SQL] Problème d'affichage de caractère spéciaux dans une variable chaîne
    Par Kryptonaute dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/08/2006, 08h40
  5. Problème d 'affichage d une grile dans un JLabel
    Par louby dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 26/06/2006, 15h56

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