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 :

Utilisation de fonction - Checkbutton [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur Recherche
    Inscrit en
    Mars 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Recherche

    Informations forums :
    Inscription : Mars 2020
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Utilisation de fonction - Checkbutton
    Bonjour à tous,

    Je suis en train de travailler sur un programme d'analyse de résultat et j'ai plusieurs module qui s'enchaîne. A partir d'un tableau, je fais plein de tri, de sélection, de liste... Je met le bout de code qui ne va pas en dessous.

    Au final, lors d'une des étapes, une nouvelle fenêtre s'affiche et l'utilisateur choisi des listes à regrouper pour les cumuler dans l'analyse. Pour cela, je fais une fenêtre avec des cases à cocher avec la liste complète des éléments, l'utilisateur coche ceux qu'il veut regrouper et clique sur "Associer". Apparaît alors dans une "listbox" la concaténation des noms. Il y a un bouton "Enlever" pour supprimer l'élément de la listbox sélectionné, un bouton "Enregistrer" et un bouton "Valider".

    Toutes mes étapes de traitements (sur l'ensemble du programme) s'enchaîne dans des fonctions. Comme j'ai des fenêtres qui s'ouvrent et se ferme régulièrement, j'ai pris le parti de fonctionner avec des variables globales.

    Quand je lance la partie "choix de liste" indépendamment du reste, ça fonctionne, mais quand je lance le programme complet, la "listbox" se met à jour avec un élément vide. Comme si je n'arrivais à ré-écrire la variable 'groupe' (cf. ci-dessous).

    En soit, le programme fonctionne. Je ne comprend juste pas pourquoi, cette partie fonctionne seule mais pas avec le reste...

    Merci du coup de main !

    Clément

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    def sous_ensemble():
        global liste2
        global e_new
        global dataset3
        global compoT2
        global taille
        global arret
        global resume
        global nameP
        global lb1
        global graph
        global grouP
        global population
        global association
        global groupe
     
        if arret != 1: #condition d'arrêt de ma fenêtre global
     
            global graph
            graph = Tk()
            graph.title( "Association d'éléments pour l'analyse" )
     
            groupe = '' #On initie la variable qui va contenir le nom du groupe
     
            global Check
     
            Check = [0]*len(resume['Inclusion']) #statut de mes boutons à cocher
     
            for y in range(0,len(Check)):
                Check[y] = IntVar() #j'en fais un Int - je sais que ça peut marcher avec un bool
     
    # Je prévois le fait qu'il puisse y avoir tellement d'élément qu'il faille faire plusieurs colonnes, ça m'évite les scroll
            nombre_colonne = int(round_up(len(resume['Inclusion'])/25))
     
    # Je créer mes Check à partir de la liste 'resume['Inclusion'][x]'
            colonne_courante=0
            if nombre_colonne == 1:
                for x in range(len(resume['Inclusion'])):        
                    l = Checkbutton(graph, text=resume['Inclusion'][x], variable=Check[x],onvalue = 1, offvalue = 0)
                    l.grid(row = x, column = colonne_courante, sticky = 'w')
     
            if nombre_colonne > 1:
                for x in range(0,24):        
                    Check[x].set(0)
                    l = Checkbutton(graph, text=resume['Inclusion'][x], variable=Check[x],onvalue = 1, offvalue = 0)
                    l.grid(row = x, column = colonne_courante, sticky = 'w')
     
                colonne_courante = 1
                while colonne_courante < nombre_colonne-1:
                    for x in range(25*colonne_courante,25*(colonne_courante+1)-1):        
                        Check[x].set(0)
                        l = Checkbutton(graph, text=resume['Inclusion'][x], variable=Check[x],onvalue = 1, offvalue = 0)
                        l.grid(row = x-25*colonne_courante, column = colonne_courante, sticky = 'w')
                    colonne_courante = colonne_courante +1
     
                if colonne_courante == nombre_colonne-1:
                    for x in range(25*colonne_courante,len(resume['Inclusion'])-1):        
                        Check[x].set(0)
                        l = Checkbutton(graph, text=resume['Inclusion'][x], variable=Check[x],onvalue = 1, offvalue = 0)
                        l.grid(row = x-25*colonne_courante, column = colonne_courante, sticky = 'w')
                    colonne_courante = colonne_courante +1
     
    # Mes différents boutons                
            bouton_associer = Button(graph, text='Associer', command=associer_inclusion)
            bouton_associer.grid(row = 0, column = nombre_colonne+1, sticky = 'N')
     
            bouton_supprimer = Button(graph, text='Enlever', command=supprimer_liste)
            bouton_supprimer.grid(row = 0, column = nombre_colonne+2, sticky = 'N')
     
            bouton_enregistrer = Button(graph, text='Enregistrer', command=enregistrer_liste)
            bouton_enregistrer.grid(row = 0, column = nombre_colonne+3, sticky = 'N')
     
    #La listbox       
            lb1 = Listbox(graph, width = 60, height = 30)
            lb1.grid(row = 1, column = nombre_colonne+1, columnspan = 3, rowspan=len(resume['Inclusion']))
     
            info = Label(graph, text="Pour défiler en latéral, cliquer sur la ligne et faire glisser")
            info.grid(row = 26, column = nombre_colonne+1, columnspan = 3, rowspan=len(resume['Inclusion']))
     
     
            bouton_quitter = Button(graph, text='Valider', command=fermer_graph)
            bouton_quitter.grid(row = 27, column = nombre_colonne+4, sticky = 'E')
     
            graph.mainloop()
        #    
     
    #### La fonction qui permet d'associer
     
    def associer_inclusion():   
        global groupe
        global Check
        global resume
        global lb1
        Check2 = [0]*len(Check) # J'ai souvent des bug quand je travaille directement sur les valeurs issues de Checkbox donc, je les lis et les stock dans une autre variable
     
        for x in range(0,len(resume['Inclusion'])-1):
            Check2[x] = float(Check[x].get())
     
        for x in range(0,len(resume['Inclusion'])-1):
            if Check2[x] == 1:
                if groupe != "":    
                    groupe = groupe +' + '+str(resume['Inclusion'][x]) #j'assemble le nom du groupe
                if groupe == "":
                    groupe = str(resume['Inclusion'][x])
            Check[x].set(0) #Je décoche
     
        lb1.insert(END, groupe) #Je mets à jour la listbox en ajoutant le nom à la fin
        groupe = '' #Je vide groupe

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

    Citation Envoyé par ClementBoissy Voir le message
    En soit, le programme fonctionne. Je ne comprend juste pas pourquoi, cette partie fonctionne seule mais pas avec le reste...
    Remplacez Tk() par Toplevel().
    Si çà fonctionne, réfléchissez à la différence entre fenêtre principale/secondaire et Frame.

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur Recherche
    Inscrit en
    Mars 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Recherche

    Informations forums :
    Inscription : Mars 2020
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci beaucoup du coup de main, ça fonctionne. Pour les Frames, j'ai regardé (pas appliqué ici mais par ailleurs). Je vais regarder pour les fenêtres secondaires.

    Je mets en résolu

    Clément

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

Discussions similaires

  1. [ASP] Utiliser la fonction PAD
    Par Hell dans le forum ASP
    Réponses: 4
    Dernier message: 31/03/2005, 16h23
  2. manuel d'utilisation de fonction
    Par SteelBox dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 11/10/2004, 01h28
  3. Utiliser des fonctions Pascal
    Par Neilos dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/03/2004, 15h43
  4. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04

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