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 :

Clic simple et reclic sur une image, possible ?


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Par défaut Clic simple et reclic sur une image, possible ?
    Bonsoir à tous !
    Voilà, j'ai un petit problème avec mon code, je ne sais pas du tout comment m'y prendre pour réaliser ce que je veux.. Je m'explique, j'ai crée une image cliquable (à l'aide de canvas, tag ainsi que fonctions.) Lorsque je clic sur cette image (donc transformée en bouton), j'ai codé l'affichage d'une image sous ce bouton (cf: code ci-dessous), jusqu'ici tout va bien. Maintenant, je voudrais que lorsque je reclique sur ce bouton, l'image créee précédemment par le premier clic sur le bouton disparaisse. Est-ce possible ? Si oui, auriez-vous une solution pour me débloquer ? Sur ceux, merci d'avance et bonne soirée à tous !
    Voici le code en question:

    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
    # -*- coding: utf-8 -*-
    from Tkinter import*
     
    root = Tk()
    root.title('Fenetre test')
    CanvasPrincipal = Canvas(root, width=400, height=200)
    CanvasPrincipal.pack()
     
    #Importations des images
    Bouton1 = PhotoImage (file="Images/Bouton1.gif")
    Bouton1r = PhotoImage (file="Images/bouton1r.gif")
    Bouton2 = PhotoImage (file="Images/Bouton2.gif")
     
    #Boutons cliquables
    def gris():
        CanvasPrincipal.create_image(200, 50, image = Bouton1, tag = "Choisir1")
    gris()
     
    #Events
     
    def event1(event):
        CanvasPrincipal.create_image(200, 150, image = Bouton2)
        CanvasPrincipal.create_image(200, 50, image = Bouton1r)
     
    # tag_bind(<nom du tag>, <nom event>, <fonction callback>)
    CanvasPrincipal.tag_bind("Choisir1", "<Button-1>", event1)
     
    root.mainloop()

  2. #2
    Membre Expert 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
    Par défaut
    Bonjour,

    Plusieurs solutions pour cela mais puisque vous vous amusez avec .tag_bind() autant jouer avec les tags.
    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
    from Tkinter import *
     
     
    def event1(event):
        global newimg
        c = event.widget
        x = c.canvasx(event.x)
        y = c.canvasy(event.y)
        item = c.find_closest(x, y)
        if "Off" in c.gettags(item):
            newimg = c.create_image(200, 150, image=Bouton2)
            c.itemconfig(item, image=Bouton1r)
            c.dtag(item, "Off")
        else:
            c.delete(newimg)
            c.itemconfig(item, image=Bouton1)
            c.addtag("Off", "withtag", item)
     
     
    root = Tk()
    root.title('Fenetre test')
    Bouton1 = PhotoImage(file="Images/Bouton1.gif")
    Bouton1r = PhotoImage(file="Images/bouton1r.gif")
    Bouton2 = PhotoImage(file="Images/Bouton2.gif")
    CanvasPrincipal = Canvas(root, width=400, height=200)
    CanvasPrincipal.pack()
    CanvasPrincipal.create_image(200, 50, image=Bouton1, tags=("Choisir1", "Off"))
    CanvasPrincipal.tag_bind("Choisir1", "<Button-1>", event1)
    root.mainloop()
    @+

  3. #3
    Membre Expert 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
    Par défaut
    Un exemple plus 'poussé'

    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
    from Tkinter import *
     
     
    def event1(event):
        c = event.widget
        x = c.canvasx(event.x)
        y = c.canvasy(event.y)
        item = c.find_closest(x, y)
        if "Off" in c.gettags(item):
            c.create_image(c.coords(item)[0], 150, image=Bouton2, tag="master_%s" % item)
            c.itemconfig(item, image=Bouton1r)
            c.dtag(item, "Off")
        else:
            c.delete(c.find_withtag("master_%s" % item))
            c.itemconfig(item, image=Bouton1)
            c.addtag("Off", "withtag", item)
     
     
    root = Tk()
    root.title('Fenetre test')
    Bouton1 = PhotoImage(file="Images/Bouton1.gif")
    Bouton1r = PhotoImage(file="Images/bouton1r.gif")
    Bouton2 = PhotoImage(file="Images/Bouton2.gif")
    CanvasPrincipal = Canvas(root, width=800, height=200)
    CanvasPrincipal.pack()
    for indx in range(1, 8):
        CanvasPrincipal.create_image(indx*100, 50, image=Bouton1, tags=("Choisir%d" % indx, "Off"))
        CanvasPrincipal.tag_bind("Choisir%d" % indx, "<Button-1>", event1)
    root.mainloop()
    @+

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Par défaut
    Salut à toi !
    Tout d'abord, merci beaucoup pour ton aide, ton premier code marche super !
    Effectivement j'ai choisis le premier code pour continuer dans l'esprit Tag
    Cependant, j'ai encore besoin d'un peu de ton aide.. J'ai exposé mon problème dans le cadre d'un projet ( et qui dit projet, dis soutenance..), et je t'avoue que je n'ai pas tout compris à ton code, sachant que je suis débutant sur Python. Serait-it possible que tu m'explique à peut près ton code ? Notamment au niveau de tes variables et des tags, j'ai un peu de mal..
    Merci d'avance !

  5. #5
    Membre Expert 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
    Par défaut
    Bonsoir,

    Citation Envoyé par SkylL3r Voir le message
    Effectivement j'ai choisis le premier code pour continuer dans l'esprit Tag
    Dans ce cas autant tout faire en tag:
    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
    from Tkinter import *
     
     
    def event1(event):
        # On identifie le Canvas
        c = event.widget
        # On transforme les coordonnees de l'event en coordonnees du Canvas.
        x = c.canvasx(event.x)
        y = c.canvasy(event.y)
        # On retrouve l'item au coordonnees x, y.
        # Ici Canvas.find_closest retourne "1" puisque l'item est
        # le premier cree.
        item = c.find_closest(x, y)
        # On regarde si "Off" est dans les tags de l'item.
        if "Off" in c.gettags(item):
            # Puisque c'est bon on cree la seconde image avec pour tag
            # "Master_%s" % item, soit Master_1.
            c.create_image(200, 150, image=Bouton2, tag="Master_%s" % item)
            # On change l'image du premier item
            c.itemconfig(item, image=Bouton1r)
            # Et on lui supprime le tag "Off"
            c.dtag(item, "Off")
        else:
            # Ici le tag "Off" n'est pas dans les tags de l'item.
            # On supprime l'image ayant pour tag "Master_1"
            c.delete(c.find_withtag("Master_%s" % item))
            # On change l'image de l'item
            c.itemconfig(item, image=Bouton1)
            # Et on rajoute le tag "Off"
            c.addtag("Off", "withtag", item)
     
     
    root = Tk()
    root.title('Fenetre test')
    Bouton1 = PhotoImage(file="Images/Bouton1.gif")
    Bouton1r = PhotoImage(file="Images/bouton1r.gif")
    Bouton2 = PhotoImage(file="Images/Bouton2.gif")
    CanvasPrincipal = Canvas(root, width=400, height=200)
    CanvasPrincipal.pack()
    # On cree la premiere image et l'on recupere son id,
    # identifiant unique pour l'item dans le Canvas,
    # dans la variable cvid. C'est ici "1" puisque c'est le premier item.
    # Le tag "Off" vas servir d'indicateur pour savoir si la seconde image
    # a ete cree.
    cvid = CanvasPrincipal.create_image(200, 50, image=Bouton1, tag="Off")
    # tag_bind de l'item.
    # Vous remarquerez que le tag utilise ici est l'id de l'item.
    CanvasPrincipal.tag_bind(cvid, "<Button-1>", event1)
    root.mainloop()
    Vous pouvez aussi vérifier que la seconde image existe juste avec CanvasPrincipal.find_withtag("Master_%s" % cvid) par exemple.

    @+

  6. #6
    Membre Expert 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
    Par défaut
    J"allais oublier,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cvid = CanvasPrincipal.create_image(200, 50, image=Bouton1, tag="Off")
    CanvasPrincipal.tag_bind(cvid, "<Button-1>", event1)
    Je joue ici, et par la suite avec c.addtag("Off", "withtag", item), avec le tag or id (cf la doc du Widget Canvas) pour identifier les items.

    @+

Discussions similaires

  1. 2 actions différentes avec un clic sur une image
    Par beegees dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 26/02/2008, 19h37
  2. Réponses: 1
    Dernier message: 25/03/2007, 18h20
  3. Réponses: 4
    Dernier message: 08/09/2006, 04h36
  4. Clic dans une zone deffini sur une image
    Par patoch76 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 30/04/2006, 12h07
  5. coordonnées d'un clic souris sur une image
    Par marcuswgs84 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/01/2005, 19h08

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