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 :

Recupérer les valeurs depuis une Treeview


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Points : 58
    Points
    58
    Par défaut Recupérer les valeurs depuis une Treeview
    Bonjour tout le monde , je suis debutant en Python et Tkinetr , j'ai une Treeview qui contient trois champs : "Prenom" , "Nom" , "Phone . Cette Treeview affiche bien les enregistrements que j'ai dans une base de ma base de données , et là je voudrais que quand je selectionne une ligne de la treeview , puis j'appuie sur le boutton "supprimer" , je veux que ça supprime l'enregistrement de la base de donnée
    Pour cela j'ai fais une fonction "supprimer()" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def supprimer() :
     
        connect()
        cur = conn.cursor()
        try:
            tv.delete(tv.focus())
        except ValueError:
            pass
        c = tv.get_selection()
        print '%s'%c
        cur.execute("""DELETE FROM firsttable WHERE Prenom = c""")
     
        cur.close()
        conn.commit()
    Mais ça ne fonctionnait pas , je voudrais savoir comment puis je recupérer les valeurs de ma treeview , l'Id tout seul , le Prenom , le Nom et les Phone , tous séparés ....
    Merci bien

  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,

    Dans un premier temps:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        try:
            tv.delete(tv.focus())
        except ValueError:
            pass
        c = tv.get_selection()
    Vous faite un delete avant le get_selection...

    Plus généralement sur Treeview:
    Pensez au selectmode. extended vous donne la liste d'une sélection multiple, browse ne permet que la sélection d'un item et none ne change pas la sélection. Dans votre cas browse me semble indiqué.
    A partir de la .selection() (ou .focus()) vous retourne l'item sélectionné et vous pouvez, via ses values (voir .set()), faire votre cur.execute.
    Après vous pouvez faire votre .delete(item).
    Pour ce qui est de focus() pensez qu'il vous retourne un item ou None.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    item = tv.focus()
    if item:
        ...
    @+

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 398
    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 398
    Points : 36 957
    Points
    36 957
    Par défaut
    Salut,

    multi-posts => multiple réponses et choix des embarras

    Je sens que PauseKawa va se régaler de la réponse que j'ai faite "ailleurs" car nous n'utilisons pas les mêmes features de ttk.

    - W

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

    J'espere juste qu'il s'y retrouvera à poster dans tous les sens.
    J'ai vu la réponse: Du pur style matriochkas

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 398
    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 398
    Points : 36 957
    Points
    36 957
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    J'ai vu la réponse: Du pur style matriochkas
    Oui et non.
    En fait, il n'est pas possible de stocker autre chose que du string dans un item de la treeview => l'identifiant d'un enregistrement de BDD ne peut être simple s'il est "technique" (un entier) mais s'il est technique, il ne se retrouve jamais affiché.
    - W

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Points : 58
    Points
    58
    Par défaut
    Bonjour , en fait j'ai pas arrivé encore à sortir de cette embarras ,

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Points : 58
    Points
    58
    Par défaut
    Il reste le probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 14: ordinal not in range(128)
    Puis j'arrive pas a associer l'id correspondant de l'item choisi , maintenant j'ai mis en commentaire les trois lignes souvants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #tv.bind("<Button-1>", on_click)
    #tv.bind("<Button-3>", on_click)
    #tv.tag_bind('mb3_click', '<3>', on_click)
    Comme ça , ça ne se passe rien quand je selectionne un item en un click , et quand je clicke sur supprimer où le boutton execute la fonction on_click() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def on_click(event):
        seltxt = tv.set(tv.selection(), 'col1') or 'None'
        print seltxt
        lab7.configure(text="L'id selectioné est : %s"%seltxt)
       # selfocus = tv.set(tv.focus(), 'col1') or 'None'
       # labfocus.configure(text=selfocus)
    ça affiche bien les données sauf ce qui contient "é" , "è" , "à" les caracteres accentués , j'avais ce probleme avant et j'ai pu afficher les bons caracteres en ajoutant devant le variable conserné ... !

    Puis je ne veux pas afficher la colonne " Id" , et je veux indiquer l'id de l'item choisi , pour le supprimer de la base de données , car c'est ça mon objectif ...
    Je veux que quand on selectionne un item , recuperer son "id" et le supprimer de la base de données ainsi de la Treeview , merci bien pour votres solutions .

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Points : 58
    Points
    58
    Par défaut
    Enfin ça marche pour l'affiche du champs "Prénom" qui contient des caracteres avec "é" , en ajoutant : .

    Là , il reste de recupérer la valeur de l "id " de l'item selectionné ; pour le supprimer de la base de données , car je ne veux pas ajouter "Id" au champs , je pense a cacher la colonne mais j'arrive pas à savoir comment faire .

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/08/2011, 13h22
  2. Réponses: 2
    Dernier message: 12/06/2011, 00h00
  3. Recuperer les valeurs d'une requette [C#]
    Par AlphonseBrown dans le forum C#
    Réponses: 7
    Dernier message: 22/11/2005, 16h36
  4. [Forms] Comment restreindre les valeurs d'une LOV
    Par popressay dans le forum Forms
    Réponses: 9
    Dernier message: 25/08/2004, 10h59
  5. intervertir les valeurs dans une colonne d'une table
    Par hammou dans le forum Débuter
    Réponses: 2
    Dernier message: 26/01/2004, 10h15

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