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

Python Discussion :

Problème avec tkinter canvas.configure


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Problème avec tkinter canvas.configure
    Bonjour!

    Je suis confronté à un problème insoluble. Dans mon programme je veux positionner une image dans mon canevas nommé originalement "canvas".
    je fais donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    image = PhotoImage(file=curBloc.texture)
    canvas.create_image((80*mPos[0])-40,(80*mPos[1])-40,image=image)
    canvas.configure(image=item)
    Cela affiche bien mon image, mais ça produit qu'en même un erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__
        return self.func(*args)
      File "C:\Users\utilisateur\Desktop\projet Rpg\Py\Level Editor.pyw", line 42, in Nouveau
        RefreshBloc([x,y])
      File "C:\Users\utilisateur\Desktop\projet Rpg\Py\Level Editor.pyw", line 115, in RefreshBloc
        canvas.configure(image=image)
      File "C:\Python33\lib\tkinter\__init__.py", line 1263, in configure
        return self._configure('configure', cnf, kw)
      File "C:\Python33\lib\tkinter\__init__.py", line 1254, in _configure
        self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
    _tkinter.TclError: unknown option "-image"
    Oui l'erreur est longue, mais le plus interessant, à mon avis, est à la fin. Si quelqu'un à une idée (et l'envie de lire le rapport d'erreur) ça m'aiderais beaucoup

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    image = PhotoImage(file=curBloc.texture)
    im = canvas.create_image((80*mPos[0])-40,(80*mPos[1])-40, image=image)
    canvas.itemconfig(im, image=item)
    Le Canvas n'as effectivement pas d'option 'image', par contre l'item créé avec create_image oui.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Je m'en doutais, mais le truc étrange, c'est que sans ça, l'image ne s'affiche pas, il ne se passe rien.

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    C'est a dire qu'avec le code suivant votre image ne s'affiche pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from Tkinter import *  # Mettre tkinter si Python 3.x
    root = Tk()
    canvas = Canvas(root)
    image = PhotoImage(file=curBloc.texture)
    canvas.create_image(0, 0, image=image, anchor="NW")
    canvas.pack()
    root.mainloop()
    Merci d'utiliser le forum pour les questions techniques.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Oui, l'image ne saffiche pas, en revanche, je ne sais pas si ça peut influer mais en gros je veux afficher mon image de cette façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    fenetre = Tk()
    global canvas
     
    canvas = Canvas(fenetre, width=1280, height=720,bg=bgEdit)
    canvas.pack(padx=5,pady=5)
     
    def RefreshBloc(mPos):
        image = PhotoImage(file=curBloc.texture)
        canvas.create_image((80*mPos[0])-40,(80*mPos[1])-40,image=image)
        canvas.configure()
     
    canvas.bind('<Button-1>',Edit)
     
    fenetre.mainloop()
    Peut-être que le fait que mon affichage soit dans une fonction qui ne se déclenche que plus tard y est pour quelque chose.

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def RefreshBloc(mPos):
        global image
        image = PhotoImage(file=curBloc.texture)
        canvas.create_image((80*mPos[0])-40,(80*mPos[1])-40, image=image)
    Perte de référence.

    @+

    Edit : et pour la petite histoire votre image 'apparaît' en cas d'erreur car la gc n'as pas le temps de la détruire.
    Merci d'utiliser le forum pour les questions techniques.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Oooooh, merci beaucoup! Sinon, si je veux créer une autre image ça enlève l'ancienne car l'objet est détruit. Y a t-il une solution ou faut-il que j'utilise une autre méthode?

    Et encore merci!

  8. #8
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Pas compris.

    Comme montré plus haut Canvas.create_image crée un item dans le Canvas permettant d'afficher une image et retourne l'index de cet item (index unique pour un même Widget Canvas).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    im = canvas.create_image((80*mPos[0])-40,(80*mPos[1])-40, image=image)
    Ici im est l'index de l'item dans le Canvas.

    Pour modifier l'image de l'item/objet graphique du Canvas on utilise .itemconfig/.itemconfigure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    canvas.itemconfig(im, image=nouvelleimagetk)
    si je veux créer une autre image ça enlève l'ancienne car l'objet est détruit
    Si vous voulez créer une autre image vous utilisez Canvas.create_image.
    Si vous voulez changer une image dans un item du canvas vous utilisez .itemconfig(<id de l'item>, option=valeur)

    ça enlève l'ancienne car l'objet est détruit
    Détruit ? Si vous avez suivit le sujet donné cela n'est détruit par le garbage collector que si ce n'est pas une variable 'viable' (comme une variable locale d'une fonction dans votre cas).

    @+
    Merci d'utiliser le forum pour les questions techniques.

  9. #9
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    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
    >>> def Foo():
    ...     a = "test"
    ... 
    >>> Foo()
    >>> print(a)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'a' is not defined
    >>> def Foo():
    ...     global a
    ...     a = "test"
    ... 
    >>> Foo()
    >>> print(a)
    test
    Dans la première fonction Foo() la variable 'a' est local à la fonction : 'a' n'existe plus après l’exécution de Foo().
    Dans la seconde 'a' est mis dans le dico global de la fonction (Le niveau supérieur de son exécution), soit au niveau du print(a).

    C'est ce qui est fait ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def RefreshBloc(mPos):
        global image
        image = PhotoImage(file=curBloc.texture)
        canvas.create_image((80*mPos[0])-40,(80*mPos[1])-40, image=image)
    Merci d'utiliser le forum pour les questions techniques.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Ah c'est bon j'ai réussi à régler mon problème.
    Merci pour tout!

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

Discussions similaires

  1. [Python 3.X] Problème avec Tkinter: AttributeError: 'function' object has no attribute 'tk'
    Par Ziph0n dans le forum Général Python
    Réponses: 1
    Dernier message: 01/02/2015, 16h41
  2. Problème avec Tkinter
    Par sqdwfgb dans le forum Tkinter
    Réponses: 3
    Dernier message: 26/04/2014, 21h16
  3. MacOS : problème avec Tkinter.Menu
    Par nymformaticien dans le forum Tkinter
    Réponses: 1
    Dernier message: 10/06/2010, 10h13
  4. Probléme avec les Canvas
    Par Noumounthi dans le forum Débuter
    Réponses: 3
    Dernier message: 30/11/2009, 01h53
  5. Problème avec fichier de configurations
    Par ploxien dans le forum Maven
    Réponses: 2
    Dernier message: 02/10/2008, 16h12

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