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 :

retrouver le Label Id à partir d'un clic sur le Label


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Points : 46
    Points
    46
    Par défaut retrouver le Label Id à partir d'un clic sur le Label
    Bonjour

    Je relie à clic droit:

    def show(event):
    print "evt ", event.widget

    j'obtiens evt .0123475 quand je clic sur mon Canvas principal
    et evt .0123475.1574322 quand je clic sur un label placé sur le Canvas
    mais je voudrais retrouver l'Id du Label, je comprend pas à quoi correspond ces chiffres

    merci

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

    Le Widget Canvas Tkinter ne dispose pas d'item label.
    Donc : Soit tu parle d'un Widget Label soit tu parle d'un item text.
    Ceci dit pour l'ID dans un Canvas tu dispose de find_closest
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def show(event):
        canvas = event.widget
        x = canvas.canvasx(event.x)
        y = canvas.canvasy(event.y)
        print "id dans le canvas :"
        print canvas.find_closest(x, y) # Attention tuple
    Tu peux aussi utiliser CURRENT.

    Bon code
    Merci d'utiliser le forum pour les questions techniques.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Points : 46
    Points
    46
    Par défaut
    merci
    find closest retourne l'Id du widget le plus proche, d'ailleurs c'est etrange car je n'ai qu'un Label sur le Canvas, avec l'Id 1 mais des clics un peu partout retournent

    evt .12049544 47 (even.x)
    id dans le canvas :
    (1,)
    evt .12049544 208
    id dans le canvas :
    (6,)
    evt .12049544 74
    id dans le canvas :
    (3,)
    evt .12049544 40
    id dans le canvas :
    (1,)
    pourtant je n'ai pas de widget d'Id 3 ou 6

    mais si je clic sur le Label, x=canvas.canvasx(event.x) donne une erreur forcement, normalement ça doit etre possible en cliquant dessus d'avoir l'Id?

    J'ai besoin de l'Id du widget, celui utilisé pour changer la couleur ou les coordonées, comment juste le recuperer quand on clique sur ce widget?

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

    Tu continu a parler de Label tu parle donc d'un widget Label Tkinter et non d'un item d'un widget canvas.
    Pourquoi utiliser un widget et non un item ?

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

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Points : 46
    Points
    46
    Par défaut
    item ou widget, je voudrais juste obtenir son Id de creation par l'event

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Points : 46
    Points
    46
    Par défaut
    c'est bon j'utilise le event.widget pour retrouver quel label est cliqué

  7. #7
    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 ____22,

    Citation Envoyé par ____22 Voir le message
    item ou widget, je voudrais juste obtenir son Id de creation par l'event
    Citation Envoyé par ____22 Voir le message
    c'est bon j'utilise le event.widget pour retrouver quel label est cliqué
    C'était bien le but de ma question.
    Les items d'un Canvas sont indexés. Par items je parle de window, arc, bitmap, image, line, oval, polygon, rectangle, text.
    Cet index est utilisable par les méthodes (find... etc) du Canvas.
    Hors la tu mets un Widget Tkinter dans un Canvas : Il n'as pas d'ID au sens Canvas mais une identité au sens Python (voir id() dans les built-in, entre autre). Il n'est donc pas possible d'utiliser les méthodes du Canvas. C'est ce qui explique que event.widget (méthode Tkinter) fonctionne et x=canvas.canvasx(event.x) te retourne une erreur.

    Citation Envoyé par ____22 Voir le message
    merci
    find closest retourne l'Id du widget le plus proche, d'ailleurs c'est etrange car je n'ai qu'un Label sur le Canvas, avec l'Id 1 mais des clics un peu partout retournent

    evt .12049544 47 (even.x)
    id dans le canvas :
    (1,)
    evt .12049544 208
    id dans le canvas :
    (6,)
    evt .12049544 74
    id dans le canvas :
    (3,)
    evt .12049544 40
    id dans le canvas :
    (1,)
    pourtant je n'ai pas de widget d'Id 3 ou 6
    Pour ce qui est du tuple retourné ((6,) etc) c'est obligatoirement des items. Il n'est pas possible que l'indexation avance dans un Canvas vierge.

    Citation Envoyé par ____22 Voir le message
    j'obtiens evt .0123475 quand je clic sur mon Canvas principal
    et evt .0123475.1574322 quand je clic sur un label placé sur le Canvas
    .0123475 Correspond à ton Canvas et 1574322 à ton Label. Au sens identité Python.
    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
    import Tkinter
     
    def show(event):
        print "evt ", event.widget
     
    fen1 = Tkinter.Tk()
    can1 = Tkinter.Canvas(fen1, height=250, width=250)
    can1.pack()
    print id(can1)
    oval1 = can1.create_oval(10, 10, 40, 40, width=2, fill='red')
    print can1.find_all()
    lab1 = Tkinter.Label(can1, bg='white')
    lab1.pack()
    print can1.find_all()
    print id(lab1)
    oval2 = can1.create_oval(210, 10, 240, 40, width=2, fill='red')
    print can1.find_all()
    Tkinter.Button(fen1,text='Quitter', command=fen1.quit).pack()
    fen1.bind('<Button-1>', show)
    fen1.mainloop()
    Bon code
    Merci d'utiliser le forum pour les questions techniques.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/06/2014, 16h33
  2. Réponses: 0
    Dernier message: 18/06/2014, 18h20
  3. pop-up à partir d'un clic sur une carte
    Par Hanneke dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 15/02/2012, 12h11
  4. Visualisation d'un ligne à partir d'un clic sur une cellule clé
    Par popeye74 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/06/2010, 12h32
  5. clic sur un label
    Par shawty dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 04/06/2008, 16h37

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