Récupération d'état de checkbox [Résolu]

Messages postés
22
Date d'inscription
lundi 2 juin 2008
Dernière intervention
20 février 2009
- 6 févr. 2009 à 11:15 - Dernière réponse :
Messages postés
22
Date d'inscription
lundi 2 juin 2008
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
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
96
Date d'inscription
lundi 9 octobre 2006
Dernière intervention
24 février 2018
- 9 févr. 2009 à 21:31
3
Merci
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

Merci lespinx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de lespinx
Meilleure réponse
Messages postés
22
Date d'inscription
lundi 2 juin 2008
Dernière intervention
20 février 2009
- 10 févr. 2009 à 14:04
3
Merci
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

Merci thibault7249 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de thibault7249
Messages postés
96
Date d'inscription
lundi 9 octobre 2006
Dernière intervention
24 février 2018
- 7 févr. 2009 à 13:37
0
Merci
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
Commenter la réponse de lespinx
Messages postés
22
Date d'inscription
lundi 2 juin 2008
Dernière intervention
20 février 2009
- 9 févr. 2009 à 09:46
0
Merci
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
Commenter la réponse de thibault7249
Messages postés
22
Date d'inscription
lundi 2 juin 2008
Dernière intervention
20 février 2009
- 9 févr. 2009 à 10:41
0
Merci
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 ...
Commenter la réponse de thibault7249
Messages postés
22
Date d'inscription
lundi 2 juin 2008
Dernière intervention
20 février 2009
- 9 févr. 2009 à 10:47
0
Merci
^^ pardon pour mon manque d'éducation
Bonjour lespinx
Commenter la réponse de thibault7249
Messages postés
22
Date d'inscription
lundi 2 juin 2008
Dernière intervention
20 février 2009
- 9 févr. 2009 à 15:48
0
Merci
Au secours !!!!!

J'en appelle à la solidarité des développeurs !
SVP
Commenter la réponse de thibault7249
Messages postés
22
Date d'inscription
lundi 2 juin 2008
Dernière intervention
20 février 2009
- 10 févr. 2009 à 10:31
0
Merci
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 
Commenter la réponse de thibault7249
Messages postés
1
Date d'inscription
mardi 22 juillet 2008
Dernière intervention
19 février 2009
- 19 févr. 2009 à 06:41
0
Merci
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 !
Commenter la réponse de Endoril
Messages postés
22
Date d'inscription
lundi 2 juin 2008
Dernière intervention
20 février 2009
- 19 févr. 2009 à 12:00
0
Merci
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
Commenter la réponse de thibault7249

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.