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

wxPython Discussion :

Identifiant dans un treectrl


Sujet :

wxPython

  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Par défaut Identifiant dans un treectrl
    Bonjour à toutes et à tous,

    j'ai un petit souci avec les ID dans un tree ctrl.
    En fait je cherche à connaitre la position d'un element dans un treectrl.
    lors de la construction du tree control, je sauvegarde les differents elements dans des listes.
    je souhaite faire la même chose avec les ID des elements du tree control.
    Lors de la selection dans le treecontrol, je recupere l'id de l'element selectionné et je souhaite le comparer avec les ID de la liste ID.

    Le probleme est le suivant: un ID a cette forme:
    <wx._controls.TreeItemId; proxy of <Swig Object of type 'wxTreeItemId *' at 0xa4dcb0> pour le premier element
    <wx._controls.TreeItemId; proxy of <Swig Object of type 'wxTreeItemId *' at 0xbe1340> pour le deuxieme element

    question: est ce que tous les chaines de caracteres sont utiles ou seulement
    le code hexa à la fin ?
    Est ce que ce code hexa est toujours sur une longueur de 8 elements
    0x123456 (2 elements pour 0x et 6 pour le reste).

    dans le cas ou seulement le code hexa est utile, existe il une commande pour obtenir seulement ce code ?

    L'idée est d'avoir une liste ID la plus legere possible et de pourvoir faire des recherches rapidement dedans.

    Bonne journée
    Lajuve

  2. #2
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Par défaut ID dans un treecontrol
    Re bonjour,

    suite à quelques tests sur les ID (ajout de 40 elements dans le tree control), la longueur des ID change mais pas la forme globale.

    A priori en considerant que l'ID global peut devenir un string, je dois pouvoir faire une recherche de carecteres dedans. De la je trouve la partie hexa de l'ID.

    Si vous connaissez une commande qui fait ca directement je suis preneur.

    Bonne journée
    David

  3. #3
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Je ne comprends pas bien ta question...

    Ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <wx._controls.TreeItemId; proxy of <Swig Object of type 'wxTreeItemId *' at 0xa4dcb0>
    n'est qu'une représentation de l'objet TreeItemId pointé par l'ID, obtenue par un print.

    L'ID n'est rien d'autre que la référence à l'adresse mémoire où est stocké cet objet.

    quand tu récupères l'ID de ton item il te suffit de le comparer à ceux que tu as stocké dans ta liste, sans autre traitement particulier...

  4. #4
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Par défaut ID dans un tree control
    Merci Alain pour ta reponse,

    mon idée de depart est de comparer les ID de la liste et celui selectionné.
    par contre vu que je vais construire un tree control relativement long, je veux me passer de la partie textuelle et ne garder que la partie hexa final.

    j'ai reussi à extraire la partie hexa de la string ID, et je construit ma liste avec.
    J'arrive par la suite à retrouver la position dans le tree control en fonction de la position dans liste.

    Par contre quand tu parles de reference à l'adresse memoire. A quelle memoire fais tu reference ?

    Merci de la premiere reponse
    lajuve

  5. #5
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Ton programme, pour pouvoir utiliser et manipuler des objets les stocke dans la mémoire vive de l'ordinateur qui lui est allouée par l'OS.
    l'Id n'est rien d'autre qu'une référence vers l'emplacement mémoire utilisé.

    Manipuler la représentation sous forme de chaine de caractère de cet Id n'a aucun sens.

    Il y a plus simple pour référencer dans ton TreeCtrl une position dans une liste:

    Ci-dessous un petit exemple utilisant le PyData. Il s'agit d'un objet qui peut être associé à tout item d'un TreeCtrl à l'aide de la méthode TreeCtrl.SetPyData(item, objet). L'objet que je passe par cette méthode aux items est une liste à un seul élément (la position que je veux retrouver).

    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
    50
    #! /usr/bin/env python
    #-*- coding: utf-8 -*-
     
    import wx
     
    class FrameTest(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, -1, title="test de TreeCtrl", size=(400, 300))
            panel = wx.ScrolledWindow(self, -1)
            sizer = wx.BoxSizer(wx.VERTICAL)
            self.arbre = wx.TreeCtrl(panel, -1)
            sizer.Add(self.arbre, 0, wx.EXPAND)
            panel.SetSizer(sizer)
     
            self.liste = []
            for x in range(50):
                self.liste.append(u"Ceci est l'item n° %s"%(x+1))
     
            self.Remplir()
            panel.SetScrollRate(20, 20)
            self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnRightClick, self.arbre)
            self.Bind(wx.EVT_CLOSE, self.OnClose)
     
        def Remplir(self):
            root = self.arbre.AddRoot(u"Ceci est la racine")
            for x in range(50):
                item = self.arbre.AppendItem(root, self.liste[x])
                self.arbre.SetPyData(item, [x,])
            self.arbre.ExpandAll()
     
        def OnClose(self, event):
            self.Destroy()
     
        def OnRightClick(self, event):
            item = event.GetItem()
            position = self.arbre.GetPyData(item)[0]
            message = u"L'item choisi se situe à la position %s dans la liste"%position
            dlg = wx.MessageDialog(self, message, u"Résultat", style = wx.OK|wx.ICON_INFORMATION)
            rep = dlg.ShowModal()
            dlg.Destroy()
     
    class Test(wx.App):
        def OnInit(self):
            frame = FrameTest()
            frame.Show(True)
            self.SetTopWindow(frame)
            return True
     
    app = Test()
    app.MainLoop()

  6. #6
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Par défaut tree control et ID (fin)
    Merci Alain_72,
    tes reponses ont eclairci mes idées.
    ta solution est interessante

    Lajuve

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

Discussions similaires

  1. [Conception] valeur d'un identifiant dans un autre champ
    Par suya95 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/07/2006, 21h27
  2. [MySQL] Récupération identifiant dans URL
    Par grumly22 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/06/2006, 09h47
  3. Envoyer ses identifiants dans une URL.
    Par Pragmateek dans le forum Langage
    Réponses: 9
    Dernier message: 28/05/2006, 22h25
  4. [WD9] Récupérer un identifiant dans un arbre
    Par Romanops dans le forum WinDev
    Réponses: 2
    Dernier message: 29/03/2006, 17h31
  5. Réponses: 5
    Dernier message: 12/12/2005, 18h30

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