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 :

Checkbutton selectionner a effacer


Sujet :

Tkinter Python

  1. #1
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut Checkbutton selectionner a effacer
    Salut les pythons,
    je génère des Checkbuttons dans un widget Text et j'aimerai pouvoir effacer grace a une methode ceux qui sont selectionner par appuie sur un bouton, j'ai essayer en leurs attribuant une valeur unique mais sa ne marche pas, sa fait trois jours que je me casse la tete la dessus...
    Le code suivant ne fonctionne pas mais reflète ce que je cherche a 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
    43
    44
    45
    46
     
    from Tkinter import *
     
    class Test():
      def __init__(self) :
        self.num=0
        self.chk_dict={}
     
     
     
      def add(self, event) :
        global b, c
        try :
          self.chk_liste=List(b.children.keys())
        except :
          self.chk_liste=[]
     
        #self.var=IntVar()
        #self.var.set(0)
        self.z=Checkbutton(b, text=c.get(), command=test.value_set) #on pourrait faire comme ca: self.z=Checkbutton(b, text=c.get(), variable=self.var)
        b.window_create(END, window=self.z)
        for values in b.children.keys() :#donne un dico avec comme clef les identifiants des enfants et comme valeurs les instances des Checkbuttons
          if values not in self.chk_liste : 
    	self.chk_dict[values]='value'+str(self.num)
     
        self.num += 1
     
      def value_set(self) :
        self.z.setvar(name='value'+str(self.num), value=1)
     
      def remove(self) :
        for values in b.children.keys() :#donne un dico avec comme clef les identifiants des enfants et comme valeurs les instances des Checkbuttons
          if b.children.get(values).getvar(name=self.chk_dict.get(values)) == 1 : # je ne sais pas comment combiner l'instance avec l'IntVar() 
    	b.children.get(values).destroy()
     
     
    test=Test()  
    a=Tk()
    b=Text(a)
    c=Entry(a)
    c.bind('<Return>', test.add)
    d=Button(a, text='Remove', command=test.remove)
    c.pack()
    b.pack()
    d.pack()
    mainloop()
    Si vous avez une idée sa serai sympa car moi je craque.

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Peut être comme ceci

    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    from Tkinter import *
     
    class Test():
        def __init__(self, master, entry):
            self.master = master
            self.entry = entry
     
        def add(self, event) :
            chkb=Checkbutton(self.master, text=self.entry.get())
            chkb.value = IntVar()
            chkb.configure(variable = chkb.value)
            self.master.window_create(END, window=chkb)
            self.master.insert(END, '\n')
     
        def remove(self):
            for widget in self.master.winfo_children():
                if isinstance(widget, Checkbutton):
                    if widget.value.get() == 1:
                        widget.destroy()
                        #print b.index(END)
     
    a=Tk()
    b=Text(a)
    c=Entry(a)
    test=Test(b, c)
    c.bind('<Return>', test.add)
    c.pack()
    b.pack()
    Button(a, text='Remove', command=test.remove).pack()
    mainloop()
    Mais il vas y avoir un problème d'index.
    Pourquoi ne pas créer les Checkbutton dans un Frame et faire le create_windows avec le Frame ? Comme cela vous avez un caractère utiliser et ce quelque soit le nombre de Chekbutton.

    @+

  3. #3
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Oups.... window_create bien sur.

    Sur l'idée du Frame

    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    from Tkinter import *
     
    class Test():
        def __init__(self, master, entry):
            self.entry = entry
            self.frame = Frame(master)
            master.window_create(END, window=self.frame)
     
        def add(self, event) :
            chkb=Checkbutton(self.frame, text=self.entry.get())
            chkb.value = IntVar()
            chkb.configure(variable = chkb.value)
            chkb.pack()
     
        def remove(self):
            for widget in self.frame.winfo_children():
                if isinstance(widget, Checkbutton):
                    if widget.value.get() == 1:
                        widget.destroy()
     
    a=Tk()
    b=Text(a)
    c=Entry(a)
    test=Test(b, c)
    c.bind('<Return>', test.add)
    c.pack()
    b.pack()
    Button(a, text='Remove', command=test.remove).pack()
    mainloop()
    @+

  4. #4
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Grand merci a toi PauseKawa,
    ton code fonctionne a merveille et tu me sort d'un casse-tete.

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

Discussions similaires

  1. effacer l'item selectionné d'un listview
    Par fred7 dans le forum Delphi
    Réponses: 3
    Dernier message: 13/05/2007, 17h17
  2. [VB6] Ecrire/Modifier/Effacer ds un fichier text-4 Chs/Lg
    Par Jonathan_Korvitch dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 24/12/2002, 18h54
  3. Comment effacer des Items d'un TListView ?
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/11/2002, 10h19
  4. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12
  5. [VB6] [FileListBox] Récupérer les éléments sélectionnés
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/10/2002, 09h11

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