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 :

Récupération de données Sqlite3 et print dans un widget text Tkinter


Sujet :

Python

  1. #1
    Membre confirmé Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Par défaut Récupération de données Sqlite3 et print dans un widget text Tkinter
    Bonjour,

    Je souhaite pouvoir après avoir récupérer des données dans ma table, les récupérer dans une fenêtre Tkinter et dans un widget type "text" afin ensuite de paramétrer un scroll.
    Mais là il me manque une notion, car j'ai ce message d'erreur. help please !

    [Running] python -u "c:\xxxxx\menesis_database_projet-04\Récupération des données sqlite.py"

    Traceback (most recent call last):

    File "c:\xxxx\menesis_database_projet-04\R�cup�ration des donn�es sqlite.py", line 24, in <module>

    citation_result = Text(root,result_citation.get('1.0', END)).pack()
    AttributeError: 'function' object has no attribute 'get'


    Voici mon code

    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
    # -*- coding: utf-8 -*-
     
    from tkinter import *
    import sqlite3
    import tkinter as tk
    import tkinter.ttk as ttk
     
    root = Tk()
     
    def result_citation(Event):
        #connexion = sqlite3.connect("basededonnees.db")  #BDD dans le fichier "basededonnees.db"
        connexion = sqlite3.connect('mnesis.db')
        curseur = connexion.cursor()  #Récupération d'un curseur
        #curseur.execute("SELECT * FROM scores")
        curseur.execute ("SELECT * FROM tb_citation")
        result = curseur.fetchall() # requête
        for rows in result:
            print("Auteur : ",rows[1]) # Choix de l'indice position 0,1,2
            print("Citation : ",rows[2]) # Choix de l'indice position 0,1,2
            print("Référence : ",rows[3]) # Choix de l'indice position 0,1,2
            print("----------------------------------") # Choix de l'indice position 0,1,2
     
    labelCitation = Label(root, text="Résultat des données citation" ).pack() 
    citation_result = Text(root,result_citation.get('1.0', END)).pack()
     
    root.mainloop()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 718
    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 718
    Par défaut
    Salut,

    Essayez de comprendre le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    citation_result = Text(root,result_citation.get('1.0', END)).pack()
    AttributeError: 'function' object has no attribute 'get'
    Vous appliquez la méthode .get à result_citation qui n'est qu'une fonction (par ailleurs, jamais appelée dans le code que vous avez postée).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Par défaut
    Merci, mais là je patine.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 718
    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 718
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    Merci, mais là je patine.
    Ben, déjà il faut appeler la fonction, par exemple, en en faisant le callback associé à un Button.
    Et si cette fonction doit mettre à jour le widget Text, c'est à l'intérieur de la fonction que çà se passe.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Par défaut
    Merci cela me permet de comprendre une partie de mon erreur.
    Effectivement, le get n'était pas approprié à la fonction, mais la récupération des données d'un champ.
    Ok pour moi...

    J'ai donc revu mon code dans cet esprit avec un bouton.
    Mais j'ai ce message.

    TypeError: argument of type 'function' is not iterable

    Voici donc mon code :

    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
    # -*- coding: utf-8 -*-
     
    from tkinter import*
    import sqlite3
    import tkinter as tk
    import tkinter.ttk as ttk
     
    defresult_citation():
        connexion = sqlite3.connect('mnesis.db')
        curseur = connexion.cursor()  
        curseur.execute ("SELECT*FROM tb_citation")
        result = curseur.fetchall() # requête
        for rows in result:
             print("Auteur : ",rows[1]) # Choix de l'indice position 
             print("Citation : ",rows[2]) 
             print("Référence : ",rows[3])
             print("----------------------------------") 
     
    root = Tk()
    root.geometry('450x300')
     
    Buton = Button(root,text="Résulat",command=result_citation).pack()
    labelCitation = Label(root, text="Résultat des données citation" ).pack() 
    citation_result = Text(root,result_citation).pack()
     
    root.mainloop()

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 718
    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 718
    Par défaut
    C'est bien: votre fonction est maintenant appelée lorsqu'on clique sur un Button.
    Normalement, si vous mettez en commentaire la ligne 27, elle devrait afficher des choses sur la console (le résultat des "print").

    Reste à remplacer ces affichages par des insertions dans le widget Text (et au préalable regarder comment il fonctionne)

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre confirmé Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Normalement, si vous mettez en commentaire la ligne 27, elle devrait afficher des choses sur la console (le résultat des "print").
    - W
    Merci pour votre analyse, mais je n'ai pas de ligne 27, à laquelle faites-vous allusion s'il vous plaît ?

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 718
    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 718
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    Merci pour votre analyse, mais je n'ai pas de ligne 27, à laquelle faites-vous allusion s'il vous plaît ?
    Désolé, c'était la ligne en erreur, la 24: citation_result = Text(root,result_citation).pack()

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre confirmé Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Par défaut
    Oui effectivement ma fenêtre Tkinter apparait, quand je clique sur le bouton mes données sont récupérées et structurées comme je le souhaite.
    Mais je n'arrive pas à afficher ces données non pas dans la console mais dans le widget "text" à la ligne 24. Pourtant je pense être logique dans ma démarche.
    J'ai un nouveau message.

    _tkinter.TclError: unknown option "-text"



    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
    # -*- coding: utf-8 -*-
     
    from tkinter import*
    import sqlite3
    import tkinter as tk
    import tkinter.ttk as ttk
     
    defresult_citation():
        connexion = sqlite3.connect('mnesis.db')
        curseur = connexion.cursor()  
        curseur.execute ("SELECT*FROM tb_citation")
        result = curseur.fetchall() # requête
    for rows in result:
    print("Auteur : ",rows[1]) # Choix de l'indice position 
    print("Citation : ",rows[2]) 
    print("Référence : ",rows[3])
    print("----------------------------------") 
     
    root = Tk()
    root.geometry('450x300')
     
    Buton = Button(root,text="Résulat",command=result_citation).pack()
    labelCitation = Label(root, text="Résultat des données citation").pack() 
    citation_result = Text(root,text=result_citation.pack()
     
    root.mainloop()

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 718
    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 718
    Par défaut
    Salut,

    Citation Envoyé par lagratteCchouette Voir le message
    Mais je n'arrive pas à afficher ces données non pas dans la console mais dans le widget "text" à la ligne 24. Pourtant je pense être logique dans ma démarche.
    Non vous êtes complétement à côté de vos pompes.

    Imaginez un Button qui affiche le nombre de fois qu'on a cliqué dessus dans un Label.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from tkinter import *
     
    count = 0
     
    def on_click():
         global count
         count += 1
         label['text'] = count
     
    root = Tk()
    label = Label(root, text=count)
    label.pack()
    Button(root, text="click", command=on_click).pack()
    mainloop()
    Vous voyez, la structure n'est pas compliquée.
    Et si on_click modifie le contenu d'un widget, qu'il soit Label, Text, ou autre çà ne va pas changer grand chose à cette structure.
    De même qu'aller récupérer une donnée dans une variable ou dans une base de données pour l'afficher ne change rien quand à cette structure.

    Et si votre code ne respecte pas cette structure là, ben, il ne peut pas marcher.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre confirmé Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Par défaut
    Merci mais là vous me perdez avec une variable "global".
    Pour vous c'est super simple et je le comprends, mais je n'ai rein trouvé sur le net qui explique simplement comment afficher des données provenant d'une base de données dans une fenêtre Tkinter.
    Pourtant c'est le basique.
    Sans tuto ou conseil, je me décourage.

    J'ai essayé de simplifier dans ce que j'ai compris, mais c'est uniquement ma console qui se remplie des données et la fenêtre n'est plus visible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "c:\xxxxxx\menesis_database_projet-04\R�cup�ration des donn�es sqlite_03f.py", line 19, in <module>
        label = Label(root,text = result).pack()
    NameError: name 'result' is not defined
    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
    # -*- coding: utf-8 -*-
     
    from tkinter import*
    import sqlite3
     
    defresult_citation():
        connexion = sqlite3.connect('mnesis.db')
        curseur = connexion.cursor()  
        curseur.execute ("SELECT*FROM tb_citation")
        result = curseur.fetchall() # requête
    for rows in result:
            label['text'] = result
     
    root = Tk()
    root.geometry('450x300')
     
    Buton = Button(root,text="Résulat",command=result_citation).pack()
    labelCitation = Label(root, text="Résultat des données citation").pack() 
    label = Label(root,text= result).pack()
     
    root.mainloop()

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 718
    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 718
    Par défaut
    Salut,

    Citation Envoyé par lagratteCchouette Voir le message
    Pourtant c'est le basique.
    Sans tuto ou conseil, je me décourage.
    Attendez voir, l'ordinateur exécute les instructions en séquence.
    Si vous arrivez à la ligne qui dit: Label(root,text = result) et que çà plante en disant, c'est quoi "result"...

    Vous devez rechercher quelle instruction assigne quelque chose à result.

    Et la seule occurrence de result dans votre code est celle qui est dans la fonction result_citation qui n'a aucune chance d'avoir été exécutée avant l'instruction qui plante. Qui plus est, comme c'est une variable locale, même si la fonction avait été exécutée, çà planterait pareil.

    Si vous ne maîtrisez pas ces bases là, pas la peine d'essayer de programmer avec tkinter: c'est compliqué.
    Et si plutôt qu'ouvrir un tuto. et prendre le temps d'apprendre ce que sont fonctions, portées des variables, ... et autres bases, vous voulez continuer à essayer de coder votre programme, laissez tomber, vous n'y arriverez pas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre confirmé Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Par défaut
    Je comprends,
    Pourriez-vous s'il vous plaît me dire où trouver ces fondamentaux et tout particulièrement ceux qui me concerne dans cet exercice.
    Car il y a tellement de choses et ce n'est pas facile de cibler.
    Merci beaucoup par avance... et je n'abandonne jamais.

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 718
    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 718
    Par défaut
    Salut,

    Citation Envoyé par lagratteCchouette Voir le message
    Pourriez-vous s'il vous plaît me dire où trouver ces fondamentaux et tout particulièrement ceux qui me concerne dans cet exercice.
    Normalement, ils sont dans tous les bons tutos d'apprentissage à la programmation (avec Python).

    J'aime bien proposer le Swinnen mais un tuto sera "bon" s'il vous donne envie d'y passer du temps, relire certains chapitres pour redécouvrir des notions survolées la première fois, ...
    La présentation, la forme joue beaucoup là dedans et il n'y a que vous pour choisir parmi le tas de tutos (gratuits) que vous allez trouver ici (ou ailleurs).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Membre confirmé Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Par défaut
    Merci, je vais lire.

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 718
    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 718
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    Merci, je vais lire.
    La programmation, c'est une pratique. Si vous ne passez pas du temps à essayer de faire les exercices, vous n'apprendrez pas grand chose.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #17
    Membre confirmé Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Par défaut
    Je comprends, mais des fois les exercices bug quand on les fait (cause ??) alors que c'est exactement l’exerce proposé et l'on se perd...
    C'est pourquoi des fois un échange est utile.
    Merci beaucoup.

  18. #18
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 718
    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 718
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    Je comprends, mais des fois les exercices bug quand on les fait (cause ??) alors que c'est exactement l’exerce proposé et l'on se perd...
    C'est pourquoi des fois un échange est utile.
    Sûr que les exercices sont parfois difficiles car on n'a pas tout compris....
    Mais il y a une progression dans les difficultés: vous n'allez pas essayé de faire les exercices du dernier chapitre avant d'avoir fait ceux des chapitres précédents.
    Et si vous êtes perdu en essayant de faire un exercice, vous pouvez aussi demander de l'aide...
    Et vous aurez plus facilement de l'aide qu'en postant un code où il y a à la fois des soucis de conception, de compréhension de ce qu'est un ordinateur et de maîtrise des bases du langage et de ses bibliothèques... qui font que vous ne pouvez pas faire grand chose des solutions qu'on vous suggère.

    Un forum, c'est juste bien pour vous aider à mieux comprendre des concepts que vous avez déjà essayé d'apprendre par vous même... Ça vient compléter les tutos. mais çà ne les remplace pas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #19
    Membre confirmé Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Par défaut Bonne direction ?
    Bonjour,

    Voilà mon code après avoir lu les tutos :

    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
    # -*- coding: utf-8 -*-
     
    from tkinter import *
    import sqlite3
    import tkinter as tk
    import tkinter.ttk as ttk
     
    resultDatabase=StringVar
     
    def result_citation(rows):
        connexion = sqlite3.connect('mnesis.db')
        curseur = connexion.cursor() 
        resultDatabase=curseur.execute ("SELECT * FROM tb_citation")
        for rows in resultDatabase.fetchall():
            return rows
     
    def affiche(rows):
        zonetext= Text(root).pack()
        zonetext.config( font=('arial',12))
        print(rows)
        zonetext.insert(END,rows)
        zonetext.after(1000,result_citation)
     
    root=Tk()
     
    root.geometry('800x400')
    root.title('Récupération données database')
     
    btn_afficherDtB=Button(root,text='afficher database data', command=affiche).pack
    label = Label(root,Text=affiche()).pack()
     
    root.mainloop()

    Mais j'ai ce message :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Traceback (most recent call last):
      File "c:\xxx\xxxxxxx_database_projet-04\tempCodeRunnerFile.py", line 29, in <module>
     
        label = Label(root,Text=affiche()).pack()
    TypeError: affiche() missing 1 required positional argument: 'rows'

  20. #20
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 718
    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 718
    Par défaut
    Citation Envoyé par lagratteCchouette Voir le message
    Voilà mon code après avoir lu les tutos
    "lire" les tutos, c'est bien... votre code ressemble plus aux exemples qu'on y trouve.

    Mais si vous aviez essayé de faire les exercices, çà vous aurait pris bien plus de temps et le message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: affiche() missing 1 required positional argument: 'rows'
    vous serait suffisamment familier pour savoir ce qu'il signifie et le corriger par vous même.

    Si vous voulez coder, donnez vous les moyens d'apprendre les bases: ce qui veut dire y passer plus de temps et mettre de côté le projet que vous voulez réaliser en attendant.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [Python 3.X] Changer la couleur d'un caractère dans un widget Text (tkinter)
    Par Michel Voisin dans le forum Général Python
    Réponses: 6
    Dernier message: 04/11/2017, 12h00
  2. Réponses: 4
    Dernier message: 14/12/2009, 13h43
  3. Réponses: 4
    Dernier message: 20/06/2009, 11h26
  4. Réponses: 2
    Dernier message: 25/01/2007, 11h34
  5. Réponses: 12
    Dernier message: 20/04/2006, 14h23

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