Récupération d'état de checkbox

Résolu
thibault7249 Messages postés 21 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 20 février 2009 - 6 févr. 2009 à 11:15
thibault7249 Messages postés 21 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 20 février 2009 - 19 févr. 2009 à 12:00
Bonjour
voila j'ai plusieurs "checkbutton"
 
<code>
i=0
j=0
valeurs = {}
value=True
while(i<36):
    value = IntVar();
    chk = Checkbutton(text= str(i), variable=value )
    chk.grid(row=(i-j*6)+5, column = j)
    valeurs[i]=value.get()
    print i
       
       
       
    i+=1
    if(i%6==0):
        j+=1
print valeurs
<\code>

le "print valeur" est là pour me montrer l'état du dictionnaire
j'aurais besoin de récupérer ce dictionnaire pour l'envoyer dans une autre fonction une fois les boutons cochés mais je ne vois pas comment faire ... pour cela j'en appelle à votre bonne volonté pour m'aider

je pensais d'abord mettre le code que j'ai mi plus haut dans une fonction avec un "return valeurs" ou alors déclarer "valeurs" en tant que variable globale mais ni l'une des solutions ni l'autre ne me semble correctes ...

je commence tout juste la programmation événementielle et je suis très débutant en interface graphique

D'avance merci
Cordialement
A voir également:

10 réponses

thibault7249 Messages postés 21 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 20 février 2009
10 févr. 2009 à 14:04
Bon et bien merci de ton aide lespinx ^^ j'ai fini par y arriver :

class CheckbuttonT(Checkbutton):
    etat = False
   
    def getText(self):        if self.etat False : self.etat True
        else: self.etat = False
        print self['text'],self.etat
   
  
    def __init__(self,_parametre,_on ,_off):        Checkbutton.__init__(self, text _parametre,command self.getText,onvalue = _on , offvalue = _off)
       
########################################################
parametres = np.arange(0,36)
global tabchk
tabchk = []
var=0
j=0
i=0
for parametre in parametres:
   
    tabchk.append(CheckbuttonT.CheckbuttonT(parametre ,1,0))  

for a in tabchk:    a.grid(row i-j*6+4,column j)
    i+=1
    if i%6==0:
        j+=1
###########################################################
n=0
    dico_canal = {}
    while n < 36:
        print tabchk[n]['text'],tabchk[n].etat

        dico_canal[tabchk[n]['text'] ]= tabchk[n].etat
        n +=1

Si ça peut aider quelqu'un un jour
Bonne journée
3
lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 77
9 févr. 2009 à 21:31
Bonsoir
Ci joint un code qui permet de lire et modifier l'état d'un Radio Bouton.

# -*- coding: ISO-8859-15 -*-
from Tkinter import *

def clic_radiobouton():
    #Traitement de l'évenement clic sur Radio Bouton

    #Lecture de l'état du Radion Bouton
    etat_radiobouton = var_Radio.get()

    #Ici on traite le cas du clic sur "B1" ==> faire un clic sur "B1"
    if etat_radiobouton == "B1":
        print "Vous avez cliqué le bouton",etat_radiobouton

    #Ici on modifie l'état du Radio Bouton "B5" (6eme Radio Bouton)
    #Il y a 6 Radio Boutons numérotés de 0 a 5
    Bouton_Radio[5].select()
    etat_radiobouton = var_Radio.get()
    print "Vous avez modifié l'état du bouton",etat_radiobouton

if __name__ == '__main__':

    AppliTK = Tk()
    #Création du bouton Radio
    Bouton_Radio = []
    var_Radio = StringVar()

    for element in [ "B0" , "B1" , "B2", "B3", "B4", "B5"]:
        rb = Radiobutton(AppliTK,
                        text = element,
                        value = element,
                        variable = var_Radio,
                        command = clic_radiobouton,
                        takefocus = False)
        Bouton_Radio.append(rb)      #rb = Identifiant interne

    #Placement des Boutons Radio
    for element in Bouton_Radio:
        element.pack(side = LEFT)

    #Activation du bouton Radio "B2"
    Bouton_Radio[2].select()

    AppliTK.mainloop()

En espérant avoir répondu à la question
1
lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 77
7 févr. 2009 à 13:37
Re-bonjour thibault7249

Si j'ai bien compris, la question est : comment faire pour passer un dictionnaire dans un appel de fonction?

exemple
def test(dic_test):
    print "def ",dic_test,  id(dic_test)

dic_main = {"a":1,"b":2,"c":3}
print "main",dic_main,  id(dic_main)
test(dic_main)    #appel de la fonction

On indique le nom du dictionnaire dans les paramètres d'appel de la fonction.
Le print  "id" du dictionnaire est là pour montrer qu'en réalité on passe dans les paramètres de la fonction, la référence à l'objet et non pas le contenu de l'objet.

Cordialement
0
thibault7249 Messages postés 21 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 20 février 2009
9 févr. 2009 à 09:46
Bon alors j'ai essayer de faire un truk comme ça :




def checkcheck():
    print i
    valeurs[i]=value.get()
   
###########################################################################################
###########################################################################################

i=0
tabchk=[]
global valeurs
valeurs = []
value=False
print "c'est cool bouton",value
while(i<36):
    value = IntVar();
    tabchk.append(Checkbutton(text= str(i), variable=value, command =checkcheck  ))
    valeurs.append(value.get())
    print i,valeurs       
       
    i+=1
print valeurs

i=0
j=0

for a in tabchk:
   
        a.grid(row (i-j*6)+4,column j)
    i+=1
    if i%6==0:
        j+=1





Le tableau s'initialise correctement mais dès qu'on coche une case il me sort une insulte du type " index out of range" sur la fonction checkcheck() et 36 juste avant ce qui correpond au "print i" de la fonction, donc je me dis que c'est normal qu'il m'insulte cet empafé vu qu'il va pas chercher au bon endroit ...

Mon problème : Comment je fais pour dire aux checkbutton quelle place il a dans le tableau  ? ou Comment je créé plusieurs checkbutton utilisables avec une boucle ?

J'ai l'impression que je fais nimporte quoi là en fait 



PS : Le gras n'est pas une pointe de narcicisme c'est juste pour différencier le code du texte ...

Cordialement
D'avance Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thibault7249 Messages postés 21 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 20 février 2009
9 févr. 2009 à 10:41
Je viens de réécrire mon code en plus lisible et il ne me met plus de message d'erreur  :



###########################################################################################
###########################################################################################
def checkcheck():
   
    if checkButtonsValues[parametre]==0:
        checkButtonsValues[parametre]=1
    else:
        checkButtonsValues[parametre]=0

    print parametre,checkButtonsValues[parametre]
   
###########################################################################################
###########################################################################################
i=0

checkButtonsValues = {}
parametres = np.arange(0,36)
tabchk = []
for parametre in parametres:
    var = IntVar();    chk Checkbutton(text parametre , variable = var, command = checkcheck)
    tabchk.append(chk)
    checkButtonsValues[parametre]= var
   
j=0
i=0
for a in tabchk:
   
        a.grid(row (i-j*6)+4,column j)
    i+=1
    if i%6==0:
        j+=1
###########################################################################################
###########################################################################################

Désolé je prend beaucoup de place à mettre mes lignes de code
Par contre je sais toujours pas comment modifier l'état de la case 17 par exemple ( je sais coché une case ) mais j'arrive pas à dire que c'est ELLE qui est cochée. Je sais pas si c'est compréhensible ...
0
thibault7249 Messages postés 21 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 20 février 2009
9 févr. 2009 à 10:47
^^ pardon pour mon manque d'éducation
Bonjour lespinx
0
thibault7249 Messages postés 21 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 20 février 2009
9 févr. 2009 à 15:48
Au secours !!!!!

J'en appelle à la solidarité des développeurs !
SVP
0
thibault7249 Messages postés 21 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 20 février 2009
10 févr. 2009 à 10:31
Merci mais en fait c'est des checkbuttons que je dois construire car j'ai plusieurs valeurs à transmettre

Là j'ai fait une classe dérivée de checkbutton

class CheckbuttonT(Checkbutton):
   
   
    def getText(self):
        print self['text']
   
  
    def __init__(self,master,_parametre,_variable):        Checkbutton.__init__(self, master,text _parametre,variable _variable,command = self.getText)
       
Mais le souci c'est que quand je clic sur un, tous se cochent :
parametres = np.arange(0,36)
tabchk = []
var=0

for parametre in parametres:
    chk =CheckbuttonT.CheckbuttonT(fenetre_root,parametre , _variable = 0)
    tabchk.append(chk)  

j=0
i=0

for a in tabchk:    a.grid(row i-j*6+4,column j)
    i+=1
    if i%6==0:
        j+=1

J'avoue que ça me rend fou 
0
Endoril Messages postés 1 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 19 février 2009
19 févr. 2009 à 06:41
Bonjour,

oui effectivement, ca peut

Mais pourrais tu commenter ton code stp ?

Je cherche a faire un prog qui lance une appli ou une autre selon l'etat des boutons.
Par exemple appli1.exe quand loption est cochee aplli2.exe si elle ne l'est pas.

A partir de ce code on peut sans doute mettre ton dictionnaire sous forme d'un fichier.txt ?

Merci de ta (vos) réponses !
0
thibault7249 Messages postés 21 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 20 février 2009
19 févr. 2009 à 12:00
Alors ma solution est de faire un tableau de checkbutton dérivés.
J'ai créé une classe dérivée du Checkbutton :

class CheckbuttonT(Checkbutton):
    #parametre "etat" de type booleen (prend soit True soit False)
    etat = False
   
   
    #methode de la clase derivee qui change l'etat
    def setEtat(self):
        #si l'etat est faux on le met en vrai        if self.etat False : self.etat True
        #sinon on le met en faux
        else: self.etat = False

   
    #constructeur faisant appel au constructeur du Checkbutton de Tkinter
    def __init__(self,_parametre):
        #on remarque que "command" lance "setEtat" quand on clique dessus
        #c'est a dire que l'on modifie le paramettre etat du bouton lorsque l'on clique dessus        Checkbutton.__init__(self, text _parametre,command self.setEtat)

Puis quand je créé mes bouton :

#on fabrique une suite de 0 a 36 non-inclu
parametres = np.arange(0,36)
#on declare "tabchk" en variable globale pour pouvoir l'utiliser dans une fonction plus tard
global tabchk
tabchk = []

# Pour chaques nombre de la suite "parametres" on ajoute un checkbutton a tabchk
for parametre in parametres:
   
    tabchk.append(CheckbuttonT.CheckbuttonT(parametre))  

#initialisation des variables qui placent les checkbuttons
j=0
i=0
for a in tabchk:    a.grid(row i-j*6+6,column j)
    i+=1
    if i%6==0:
        j+=1

Après j'ai un bouton simple :
boutton = Button(text="Afficher  ", command= ta fonction )
boutton.grid(row =1, column= 1)

Et c'est dans ta fonction que tu utilises "tabchk.etat" comme par exemple ici :
while n < len(tabchk):
        dico_canal[tabchk[n]['text'] ] = tabchk[n].etat
        n +=1

Après si c'est "une application OU une autre" je te conseille de travailler sur le script de lespinx sur les radiobutton qui explique très clairement et je l'en remercie encore de son post.

Mon code n'est pas très bon j'ai fait plein ed modif rien qu'en le relisant vite fait.

En espérant tavoir aidé.
Bon courage
0
Rejoignez-nous