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 :

Passer une variable d'une fonction


Sujet :

Tkinter Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut Passer une variable d'une fonction
    Bonjour,

    Je suis débutant python, mon gui est Tkinter, je suis sur la version 2.7.3
    J'ai créé une mini appli sur les aliments.
    Pour cela j'utilise un fichier csv que je charge.
    Mon appli est en 3 frames.

    1er frame avec un scrollbar des aliments
    2em frame pour la recherche des aliments par catégorie.
    3em frame pour afficher le résultat du clique dans le scrollbar et de la recherche.

    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    +-----------------------+--------------+
    |                       |              |
    |     Frame 2           |  Frame 1     |
    |                       |              |
    +-----------------------+              |
    |                       |              |
    |        Frame 3        |              |
    |                       |              |
    |                       |              |
    +-----------------------+--------------+
    Voici mon fichier csv : aliments.csv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ID,Categorie,Aliments,Calories,Proteines,Lipides,Glucides,Sodium,Potassium,Magnesium,Calcium
    0,Viandes,Boeuf maigre,108,20.4,2.9,0.0,60,350,20,7
    1,Viandes,Boeuf mi-gras,238,20.3,17.4,0.0,90,324,19,9
    2,Viande,Aloyau,266,17.0,22.0,0.0, - , - , - ,10
    3,Viande,Carbonade,233,18.6,16.5,0.0,95,348,18,12
    je charge dans la frame 1 les noms des aliments du fichier csv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def extraction_colonnes():
        global ligne
        fname = "/home/laurent/.test2/aliments.csv"
        file = open(fname, "rb")
     
        try:
    	reader = csv.reader(file)
    	for row in reader:
    	    ligne = row[2] 
    	    # print ligne 
        finally:
    	file.close()
    Mais je n'arrive pas à faire passer le résultat de la variable ligne de la fonction "extraction_colonnes" dans le scroobar afin de voir les noms des aliments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #scrollbar dans frame1
    scrollbar = Scrollbar(frame1)
    scrollbar.pack( side = RIGHT, fill=Y )
     
    mylist = Listbox(frame1, yscrollcommand = scrollbar.set )
       mylist.insert(END, "Aliment : " + ligne)
     
    mylist.pack( side = LEFT, fill = BOTH )
    scrollbar.config( command = extraction_colonnes )
    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Aliments
    Boeuf maigre
    Boeuf mi-gras
    Aloyau
    Carbonade
    Python m'affiche le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    laurent@MSI-GT683:~/python/TV-Samsung$ python /home/laurent/python/recette-calories/aliments.py
      File "/home/laurent/python/recette-calories/aliments.py", ligne 46
        mylist.insert(END, "Numéro : " + line)
        ^
    IndentationError: unexpected indent
    laurent@MSI-GT683:~/python/recette-calories$
    La ligne 46 est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       mylist.insert(END, "Numéro : " + ligne)
    Comment dois-je faire ?

    Merci.
    Intel I7 960 | 6 Go Ram | 5 HDD au total 3636 Go | Windows 7 Edition intégral x64 | WampServer 2.0c | Apache 2.2.8 | Php 5.2.6 | MySQL 5.0.51b
    DreamPlug | 512 mo ram | SSD 16 GO | Linux debian 2.6.39.4 | armv5tel | Lamp | PHP 5.3.3-7 | Apache 2.2.16 | Mysql 14.14

  2. #2
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Le message de Python indique clairement un problème d'indentation.
    Difficile de dire plus sans le script complet.
    Pas d'aide par mp.

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

    Si la ligne 46 est écrite comme dans l'extrait de code donné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #scrollbar dans frame1
    scrollbar = Scrollbar(frame1)
    scrollbar.pack( side = RIGHT, fill=Y )
     
    mylist = Listbox(frame1, yscrollcommand = scrollbar.set )
       mylist.insert(END, "Aliment : " + line)   #<--- indentation
     
    mylist.pack( side = LEFT, fill = BOTH )
    scrollbar.config( command = extraction_colonnes )
    Inutile de chercher plus loin.

    Cela étant, je ne vois pas le rapport entre cette erreur et le titre de la discussion: "Passer une variable d'une fonction" et encore moins tkinter.

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

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mylist = Listbox(frame1, yscrollcommand = scrollbar.set )
       mylist.insert(END, "Aliment : " + line)
       ^ Pouquoi cette indentation ?
    Tu as un autre problème là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    def extraction_colonnes():
        global line
        fname = "/home/laurent/.test2/aliments.csv"
        file = open(fname, "rb")
     
        try:
    	reader = csv.reader(file)
    	for row in reader:
    	    ligne = row[2]  ! C'est ici que ça se passe !
    	    # print line 
        finally:
    	    file.close()
    .1 Tu remplaces ligne par chaque nouvelle valeur, mais sans les conserver.
    .2 Tu utilises les noms line et ligne, je suppose par distraction.
    .3 Tu ne retournes pas la liste des noms d'aliment, cette fonction n'a pas d'utilité dans ce cas.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut
    Bonsoir,

    Oui j'ai rectifié le code du premier message, line par ligne.
    D'où vient le problème d'indentation ?


    Merci.
    Intel I7 960 | 6 Go Ram | 5 HDD au total 3636 Go | Windows 7 Edition intégral x64 | WampServer 2.0c | Apache 2.2.8 | Php 5.2.6 | MySQL 5.0.51b
    DreamPlug | 512 mo ram | SSD 16 GO | Linux debian 2.6.39.4 | armv5tel | Lamp | PHP 5.3.3-7 | Apache 2.2.16 | Mysql 14.14

  6. #6
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    ??
    Pas d'aide par mp.

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Les indentations font partie de la syntaxe de Python. Elles ne sont pas conventionnelles mais obligatoires.

    Par conséquent, si on en met une là où le code ne la justifie pas, une erreur de type SyntaxError est levée.

Discussions similaires

  1. [Débutant] Affecter une variable d'une classe C# à une variable Javascript
    Par SultanGeek dans le forum C#
    Réponses: 0
    Dernier message: 20/06/2015, 20h42
  2. Réponses: 4
    Dernier message: 17/09/2009, 13h09
  3. Passer une variable d'une class a une autre
    Par haaa11 dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2008, 15h18
  4. Réponses: 1
    Dernier message: 22/06/2007, 15h40
  5. faire passer une variable d'une fct js à une page php
    Par harlock59 dans le forum Langage
    Réponses: 1
    Dernier message: 25/11/2005, 14h41

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