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 :

Des checkbuttons qui conservent les paramètres


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 145
    Points : 68
    Points
    68
    Par défaut Des checkbuttons qui conservent les paramètres
    Bonjour,

    je reviens sur des problèmes de checkbuttons (si on peut appeler ceci des problèmes )

    Voila, j'ai bien mes checkbuttons qui fonctionnent bien mais je me demandais si il n'y avait pas moyen que ceux ci garde les cases cochées après redémarrage du soft ?

    J'ai bien regardé sur le net mais je n'ai rien vu de concluant mais je suppose que c'est possible.

    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
     
    from Tkinter import *
    def envoyer():
       if variable.get():
            fichier = open("tous.bat", "w")
            fichier.write("toto@aol.fr,")
            fichier.close()
     
    #Mise en place de la fenêtre graphique
    root = Tk()
    root.title("Mails V2.0")
    #Mise en place des variables
    variable = IntVar()
     
    #Checkbutton pour nom
    checkbox = Checkbutton(root, variable=variable, text='Toto')
    checkbox.grid(row=0,column=0)
     
    bouf3=Button(root,text="Validez le choix",command=envoyer).grid(row=30,column=0)
    bouf=Button(root,text='Quitter',command=root.destroy)
    bouf.grid(row=35,column=1)
    root.mainloop()
    Voici une partie de mon code très épuré.

    Je suppose qu'il y a un paramètre à ajouter dans mon checkbutton mais je ne trouve pas lequel

    Je vous remercie par avance pour votre aide.

    Steph70

    [edit] je sais que je suis un peu pénible mais pour les checkbuttons, y a t'il un paramètre qui permettrait leur alignement ?

    Merci encore

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Si tu veux sauvegarder les mails cocher, tu dois utiliser un fichier de configuration. Tant qu'à faire je te propose aussi sauvegarder la liste des emails de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    toto@aol.fr 1 
    titi@free.fr 0 
    tutu@neuf.fr 0
    Les chiffres 1 et 0 indique si la case est coché, ou pas.

    De cette manière tu peux ajouter une checkBox juste en ajoutant une ligne dans ton fichier de configuration.
    Voici une manière de faire:

    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
     
    #!/usr/bin/python
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
     
    def envoyer():
       fichier = open("tous.bat", "w")
       fileConfig = open("config.cfg", "w")
       for checkBox, var in dictCheckBox.items():
            if var.get():
                fichier.write(checkBox['text']+',')
     
            fileConfig.write("%s %i \n"%(checkBox['text'], var.get()))
     
       fichier.close()
       fileConfig.close()
     
     
    root = Tk()
    root.title("Mails V2.0")
     
    #récupération du fichier de config
    listMail = []
    fileConfig = open("config.cfg")
    for mail in fileConfig:
        listMail.append(mail.split())
    fileConfig.close()
     
    #création et initialisation des checkboxs
    dictCheckBox = {}
    for mail in listMail:
        variable = IntVar()
        checkbox = Checkbutton(root, variable=variable, text=mail[0])
        checkbox.grid(sticky=W)
        dictCheckBox[checkbox] = variable
        if int(mail[1]):
            checkbox.select()
     
    btnValider = Button(root,text="Validez le choix",command=envoyer).grid()
    Button(root,text='Quitter',command=root.destroy).grid()
    root.mainloop()
    Pour le positionnement il faut utiliser sticky.
    Je te conseil de faire un petit tour sur la doc de Tkinter:
    http://infohost.nmt.edu/tcc/help/pubs/tkinter/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 145
    Points : 68
    Points
    68
    Par défaut
    Bonjour et une nouvelle fois merci.

    Pour le sticky, je suis allé voir et ca fonctionne désormais.

    Par contre, pour ton code, c'est malheureusement au dessus de mon niveau.

    J'ai essayé de créer un fichier texte dans lequel s'inscrit les checkbox cochés et de relire ce texte au demarrage du soft pour les retrouver et les cocher par défaut mais en vain.

    Et je viens de remarquer que si je met une variable = 1 ca laisse quand meme la coche décochée.

    Je n'y comprend plus rien. Y a un bug ou c'est moi qui dit n'importe quoi ?

    Voici le code :
    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
    from Tkinter import *
    import os
    import sys
    #Mise en place des défintions pour ecriture du fichier bat
    def envoyer():
        fichier = open("tous.bat", "w")
        if variable.get():
            fichier.write("toto@aol.fr,")
    def envoi():
    	os.system("tous.bat")
    #Mise en place de la fenêtre graphique
    root = Tk()
    root.title("Mails V2.0")
    #Mise en place des variables
    variable= IntVar()
    chaine = "variable" # Texte à rechercher
    fichier = open("fichier.txt","r")
    for ligne in fichier:
        if chaine in ligne:
            variable=variable
    fichier.close()
    #Checkbutton pour nom
    checkbox = Checkbutton(root, variable=variable, text='Toto')
    checkbox.grid(row=0,column=0,sticky="w")
    bouf3=Button(root,text="Validez le choix",command=envoyer).grid(row=30,column=0)
    bouf=Button(root,text='Quitter',command=root.destroy)
    bouf.grid(row=35,column=1)
    root.mainloop()
    Merci encore pour ton aide
    Amicalement
    Steph70

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Je ne comprend pas bien ce que tu as voulu faire, il y a des incohérences, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for ligne in fichier:
        if chaine in ligne:
            variable=variable
    Voici un code plus simple. J'ai quand même ajouté un 2ème checkBouton.
    le fichier de config ne comporte qu'une ligne qui indique l'état des checkButton.
    par exemple "0 0" si les 2 sont déselectionné, ou "1 0"...
    commence par créer ton fichier.txt et écrit "0 0" dedans (sans les guillemets).
    C'est bien sur pas du tout optimisé, mais j'ai essayé de faire au plus simple.
    J'ai ajouté des commentaire dans le code:

    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
     
    #!/usr/bin/python
    # -*- coding: cp1252 -*-
     
     
    from Tkinter import *
    import os
    import sys
    #Mise en place des défintions pour ecriture du fichier bat
    def envoyer():
        fichierConfig = open("fichier.txt","w")
        fichier = open("tous.bat", "w")
        #si la case est cochée
        if varToto.get():
            #ajoute l'url dans le fichier .bat
            fichier.write("toto@aol.fr,")
            #indique que la case est coché dans le fichier de config
            fichierConfig.write("1 ")
        #sinon indique que la case n'est pas coché dans le fichier de config
        else:
            fichierConfig.write("0 ")
     
        #idem pour la 2me checkbox
        if varTiti.get():
            fichier.write("titi@aol.fr,")
            fichierConfig.write("1 ")
        else:
            fichierConfig.write("0 ")
     
        fichierConfig.close()
        fichier.close()
     
     
     
     
    root = Tk()
    root.title("Mails V2.0")
    #Mise en place des variables
     
    #les variables
    varToto = IntVar()
    varTiti = IntVar()
    #les 2 checkButton
    CheckToto = Checkbutton(root, variable=varToto, text='Toto')
    CheckTiti = Checkbutton(root, variable=varTiti, text='Titi')
    CheckToto.grid()
    CheckTiti.grid()
     
    #initialisation des checkButton en fonction du fichier de config
    fichier = open("fichier.txt","r")
    #recupère et split le texte
    #on se retrouve avec une liste: ['0', '0']
    listCoche = fichier.read().split()
    #si la 1ére checkbox doit être coché:
    if int(listCoche[0]):
        #select sert à cocher la case
        CheckToto.select()
    #si la 2ére checkbox doit être coché:
    if int(listCoche[1]):
        CheckTiti.select()
     
    fichier.close()
     
    Button(root,text="Validez le choix",command=envoyer).grid()
    Button(root,text='Quitter',command=root.destroy).grid()
     
    root.mainloop()

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 145
    Points : 68
    Points
    68
    Par défaut
    Re et remerci

    Entre temps, j'ai trouvé une solution médiane et inscrit automatiquement dans un fichier les mails cochés et mis un bouton qui affiche la liste des mails inscrits dans ce fichier.

    Ton idée est meilleure et je vais l'utiliser.

    Merci encore

    Amicalement
    Steph70

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/05/2009, 17h06
  2. Réponses: 0
    Dernier message: 13/04/2009, 23h40
  3. division qui conserve les chiffres après la virgule
    Par ali.ensi dans le forum Débuter
    Réponses: 3
    Dernier message: 05/10/2007, 13h26
  4. Réponses: 2
    Dernier message: 30/06/2006, 15h12

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