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 :

Récuperer des variables de Checkbutton


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Récuperer des variables de Checkbutton
    Bonjour,

    J'ai actuellement un problème avec des Checkbutton
    En effet, je dois créer une page d'affichage de résultats suite à une recherche par critères dans une base de données.
    Les résultats doivent pouvoir être sélectionnés (à l'aide des Checkbutton, renvoyant une valeur True ou False) afin d’être modifiés par d'autres fonctions par la suite.

    Le problème est que ces autres fonctions nécessitent donc en paramètre une liste de "True" ou "False" selon que le résultat est coché ou non.
    Et je n'arrive pas à créer cette liste, le nombre de résultats (et donc de checkbutton) n'etant pas fixe.
    Je ne vois pas comment récupérer les valeurs des coches, dans l'ordre, sans nom défini pour chacune.

    Pour l'instant mon code ne marche donc pas, et je pense qu'il faut au moins utiliser ".get()" quelque part, mais je suis paumée et je tourne en rond!
    Je demande donc votre aide
    (je précise que je suis relativement débutante en programmation, donc... ne soyez pas trop rapides dans vos explications s'ils vous plait! ^^ )

    Voila l'extrait du code qui me pose probleme :

    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
    EtatCheckButton =[False for i in range (len(resultat))]
            for i in range(len(resultat)) :
                EtatCheckButton[i] = StringVar()
                Bouton=Checkbutton(fenetre_resultat, text='', variable=EtatCheckButton[i], onvalue=True, offvalue=False, bg='light blue')
                Bouton.grid(row=i+1, column=1)
                for j in range(10) :
                    if resultat[i][j]==None :
                        TextAffiche='Ne se prononce pas'
                    elif j in [4,7,9] :
                        if j==4 or j==7 :
                            if resultat[i][j] in [1, 'True'] :
                                TextAffiche='Soudés'
                            elif resultat[i][j] in [2,'False'] :
                                TextAffiche='Non Soudés'
                        elif j==9 :
                            if resultat[i][j]=='2' :
                                TextAffiche='Partout'
     
                            elif resultat[i][j]=='1' :
                                TextAffiche='A la base'
                    else :
                        TextAffiche=str(resultat[i][j])
     
                    Label(fenetre_resultat, text=TextAffiche, bg='light blue').grid(row=i+1, column=j+2)

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

    Pourquoi ne pas coder un petit exemple avec 2/3 checkbutton juste pour voir comment intégrer la fonctionnalité dans votre code par la suite?

    Je dis çà car, on comprend que vous avez un soucis mais comme on ne peut pas faire tourner le code que vous avez posté "imaginer" quel soucis vous rencontrez n'est pas facile. A partir de là, pas grand monde arrivera à vous aider simplement parce qu'on ne comprend même pas quel problème vous avez/cherchez à résoudre.

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

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Oui, c'est vrai.

    J'ai essayé de faire un petit exemple simple...

    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
    resultat = [['Jean', '3'],['Marie', '5'], ['Paul', '19'],['Pierre', '15'], ['Alice', '14']] 
     
    from tkinter import *
    from tkinter.ttk import Combobox
    from tkinter.messagebox import *
    from tkinter import tix
    import tkinter.filedialog
     
     
    def Selection(EtatCheckButton, resultat):
        selection = []
        for i in range (len(resultat)):
            if EtatCheckButton[i] ==True :
                selection.append(resultat [i])
        showinfo(title=None, message=selection)
     
     
     
     
    def affichage_recherche (resultat) :
        fenetre_resultat=Tk()
     
     
        Prenom=Label(fenetre_resultat, text='Nom')
        Prenom.grid(row=0, column=2)
     
        Score=Label(fenetre_resultat, text='Score')
        Score.grid(row=0, column=3)
     
     
        EtatCheckButton =[False for i in range (len(resultat))]
        for i in range(len(resultat)) :
            EtatCheckButton[i] = StringVar()
            Bouton=Checkbutton(fenetre_resultat, text='', variable=EtatCheckButton[i], onvalue=True, offvalue=False)
            Bouton.grid(row=i+1, column=1)
            for j in range(2) :
                TextAffiche=resultat[i][j]
     
                Label(fenetre_resultat, text=TextAffiche).grid(row=i+1, column=j+2)
     
        BoutonSelection = Button(fenetre_resultat, text = 'Selection', command =lambda: Selection(EtatCheckButton,resultat))
        BoutonSelection.grid(row = len(resultat) + 1,column = 2)

    Le problème est donc que le code tel qu'il est ne récupère pas les valeurs "True" ou "False" des chaeckbutton.
    La liste étant donc initialisée avec que des False, la fonction Selection ne renvoie rien, quel que soit le nombre de coches.


    J'espère que c'est plus clair!!

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

    Citation Envoyé par dreylb Voir le message
    J'espère que c'est plus clair!!
    C'est mieux.

    Citation Envoyé par dreylb Voir le message
    Le problème est donc que le code tel qu'il est ne récupère pas les valeurs "True" ou "False" des chaeckbutton.
    La liste étant donc initialisée avec que des False, la fonction Selection ne renvoie rien, quel que soit le nombre de coches.
    Si vous voulez que la variable associée au Checkbutton soit un booléen, il faut que ce soit BooleanVar plutôt que StringVar.
    Dans tous les cas, pour récupérer la valeur d'un XXXVar, il faut lui appliquer .get:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def Selection(EtatCheckButton, resultat):
        selection = []
        for i in range (len(resultat)):
            if EtatCheckButton[i].get() == True :
                selection.append(resultat [i])
        showinfo(title=None, message=selection)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Oooh! Mais c'est donc la qu'il faut mettre le ".get()"! Merci beaucoup!

    J'ai un autre petit probleme maintenant par contre...

    Pour travailler sur cette fenetre, et corriger le probleme que j'avais, j'ai isolé toute la partie du code qui m'etait necessaire (import, fonction appelées,...) sur une autre page.

    Isolée, la fonction marche très bien.
    Par contre, dès que je la remets dans le code entier (sans modification), les variables des checkbuttons ne sont à nouveau plus prises en compte, et j'avoue que je ne comprends pas très bien pourquoi, vu que rien ne change dans les fonctions en cause....

    Je sais que sans connaitre le code c'est peut être impossible de répondre...mais si vous avez une idée qui vous vient je suis preneuse !

    En tout cas, merci de votre aide!

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

    Citation Envoyé par dreylb Voir le message
    Je sais que sans connaitre le code c'est peut être impossible de répondre...mais si vous avez une idée qui vous vient je suis preneuse !
    Vu que vous avez mis ceci:
    dans une fonction...
    Probable qu'à chaque fois que vous créez une fenêtre, vous effectuez un appel à Tk().
    Vérifiez que vous ne le faites qu'une seule fois au lancement de l'application et remplacez les autres par Toplevel().

    Sans voir le code, j'ai pas mieux.

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

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Moi, je dis chapeau!

    C’était bien ça! Encore merci !
    Maintenant tout fonctionne bien pour cette partie la!

    Bonne continuation à vous!

Discussions similaires

  1. Récuperation des variables avec GET
    Par kazylax dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 07/05/2009, 17h46
  2. Récuperer des variables VBA dans un autre classeur
    Par MC wacko dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/08/2007, 14h35
  3. Récuperer des variables vbs dans une page php
    Par tese84 dans le forum VBScript
    Réponses: 18
    Dernier message: 19/06/2007, 10h28
  4. Problème de récuperation des variables de session
    Par paradeofphp dans le forum ASP.NET
    Réponses: 10
    Dernier message: 02/03/2007, 15h40
  5. Réponses: 2
    Dernier message: 19/01/2006, 18h58

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