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 :

appeller une classe par son numéro de création


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    27
    Points
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 27
    Points : 30
    Par défaut appeller une classe par son numéro de création
    Bonjour,
    je suis en train de faire un programme en tkinter et j'aurais voulu savoir s'il était possible de récupérer les numéros de l'ordre de construction des objets pour appeler l'élément de la classe.

    En d'autres thermes, quand on créé un élément dans un canevas, il reçoit automatiquement un numéro et il est possible de détruire cet élément par son numéro( can.delete(3) détruira le 3ème élément) ce que je voulais savoir c'est si au lieu d'appeller Classe.taille() par exemple, s'il est possible de faire 3.taille(), je sais que ca ne marche pas, mais existe-t'il un code qui fasse un truc du style?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 558
    Points
    37 219
    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 558
    Points : 37 219
    Par défaut
    Salut,
    les items d'un canvas sont accessibles via .itemcget(id, option) et "setables" via .itemconfigure(id, **kwds).
    Ca suffit pour la plupart des "cas d'utilisation" mais on peut bien sûr faire un proxy/facade pour les cas particuliers voire encapuler l'id dans un objet, genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Item(object):
         def __init__(self, ident, canvas):
               self._ident = ident
               self._canvas = canvas
         def get(self, option):
               return self._canvas.itemcget(self._ident, option)
         def set(self, **kwds):
               return self._canvas.itemconfigure(self._ident, **kwds)
    Mais je ferais cela plutôt via partial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Item(object):
         def __init__(self, canvas, ident):
               self.get = partial(canvas.itemcget, ident)
               self.set = partial(canvas.itemconfigure, ident)
    c'est moins bavard...
    - W
    PS: La difficulté ensuite est de contrôler la destruction des objets dans le canvas car sinon on a des pointeurs vers "plus rien" qui se baladent partout.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    27
    Points
    30
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2009
    Messages : 27
    Points : 30
    Par défaut
    ok, merci beaucoup, je vais donc m'informer sur les items

  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
    Points
    4 005
    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
    Par défaut
    Bonsoir,

    Je ne sais pas ce que vous recherchez par rapport à l'index mais si vous regardez la doc c'est tag or ID, donc:

    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
    #!/usr/bin/env python
    # -*- coding: utf8 -*-
    #
    #
    try:
        import tkinter as tk
    except:
        import Tkinter as tk
     
    def chtxt():
        can.itemconfig(can.find_withtag(2), text="A ben oui")
     
    def chcolor():
        can.itemconfig(can.find_withtag(1), fill="red")
     
    root = tk.Tk()
     
    can = tk.Canvas(root, height=200, width=300, background="white")
    can.create_rectangle(20, 20, 280, 180, fill="green")
    can.create_text(100, 100, font="Arial 20 bold underline", text="Test")
    can.pack()
     
    tk.Button(root, text='Change text', command=chtxt).pack(side=tk.LEFT)
    tk.Button(root, text='Change color', command=chcolor).pack(side=tk.LEFT)
    tk.Button(root, text='Quit', command=root.quit).pack(side=tk.LEFT)
     
    root.mainloop()
    A vous de développer suivant votre besoin.

    @+

  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
    Points
    4 005
    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
    Par défaut
    Re,

    Pensez à voir les tags quand même

    @++

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/06/2012, 02h09
  2. [POI] Appeler une cellule par son nom
    Par Galak extra dans le forum Documents
    Réponses: 9
    Dernier message: 17/06/2008, 15h33
  3. Réponses: 3
    Dernier message: 25/02/2007, 19h49
  4. Réponses: 8
    Dernier message: 19/10/2006, 16h41
  5. [VB6] Appeler une procedure par son nom.
    Par kenn dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 24/05/2006, 10h29

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