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

  1. #1
    Candidat au Club
    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
    Points : 3
    Points
    3
    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
    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,

    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
    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
    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
    Candidat au Club
    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
    Points : 3
    Points
    3
    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
    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
    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
    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
    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.

    @+

  7. #7
    Candidat au Club
    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
    Points : 3
    Points
    3
    Par défaut
    Impeccable, je comprends mieux maintenant !
    Cependant, j'ai une dernière question.. Si je veux associer un event à l'image qui vient d'être affichée, après avoir cliqué sur cet image et donc lancé l'event, je ne peux plus cacher ensuite l'image qui à été créée puisque le programme est bloqué dans la def de l'event associé à cette nouvelle image.. C'est peut être un peu mal expliqué, mais j'espère que tu comprends ce que je veux dire. Y-a-t-il une solution pour y remedier ( et donc pouvoir quand même cacher l'image après avoir cliqué et lancer l'event associé à celle-ci) ?
    Bon dimanche !

  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
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        # 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)
    Si c'est a soutenir il vas sans doute falloir expliquer ceci.
    Si ce n'est pas complètement acquis merci de faire un nouveau post.

    @+ et bon code.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Paramétreur de progiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Connaissance
    Bonsoir a tous je suis nouveau en programmation de Python je dirai même débutant je suis a l’étude de l'expression while
    voila ma préoccupation
    sous Python Windows je ne trouve pas le signe (plus petit et plus grand)
    sous Python Shell je peux fais le copier et coller ça marche
    mais lorsque je veux essayer par exemple
    a,b,c=1,1,1
    while c(inférieur) a 1 :
    print (a),
    a,b,c=b,a+1,c+1
    et que je valide au lieu d'obtenir plutôt les nombres sur la même ligne
    11,12,26,26,45,88(juste un aperçue)
    j'obtient plutôt un truc de ce genre
    11
    12
    26
    26
    45
    88

    j'aimerai donc savoir quel est le problème et ou puis je trouver la touche (inférieur et supérieur)
    merci

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, 20h37
  2. Réponses: 1
    Dernier message: 25/03/2007, 19h20
  3. Réponses: 4
    Dernier message: 08/09/2006, 05h36
  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, 13h07
  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, 20h08

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