2017-10-14 3 views
1

Je veux afficher les options sélectionnées de ma liste de cases à cocher dans une nouvelle liste dans une nouvelle fenêtre Tkinter et lorsque vous la parcourez revient à l'écran principal (en utilisant Python 3.5 avec Ubuntu 16.04).Afficher les options sélectionnées de checkbox à une nouvelle liste dans la fenêtre tkinter suivante

import tkinter as tk 
import tkMessageBox 

lista=['jpeg','jfit','tiff','gif','png','bmp']  
class PopUp(tk.Toplevel): 
    def __init__(self, number=10): 
     tk.Toplevel.__init__(self) 

     self.global_state = tk.BooleanVar() 

     cb = tk.Checkbutton(self, text="select/deselect all", variable=self.global_state, command=self.select_clear_states) 
     cb.grid(row=0, column=0, padx=5, pady=1) 

     self.states = [] 

     for n in range(len(lista)): 
      var = tk.BooleanVar() 
      cb = tk.Checkbutton(self, text=str(lista[n]), variable=var) 
      cb.grid(row=n+1, column=0, padx=5, pady=1) 
      self.states.append(var) 

    def select_clear_states(self): 
     state = self.global_state.get() 
     for x in self.states: 
      x.set(state) 

def popup(num): 
    win = PopUp(num) 

root = tk.Tk() 

b = tk.Button(root, text="5 checkboxes", command=lambda:popup(5)) 
b.pack() 

root.mainloop() 
+1

Votre question ne contient pas de question. Vous nous avez dit ce que vous voulez, mais vous n'avez pas expliqué ce dont vous avez besoin. –

Répondre

0

En supposant que je vous comprends bien, si vous voulez faire avec Checkbutton s que vous pourriez faire quelque chose comme ci-dessous:

from tkinter import * 

class App: 
    def __init__(self, root): 
     self.root = root 
     self.top = Toplevel(root) 
     self.frame = Frame(self.top) 
     self.frame.pack() 
     self.check = [] 
     self.var = [] 
     for i in range(10): 
      self.var.append(IntVar()) 
      self.var[i].trace("w", self.callback) 
      self.check.append(Checkbutton(self.root, text="Option "+str(i), variable=self.var[i])) 
      self.check[i].pack() 
    def callback(self, *args): 
     self.frame.destroy() 
     self.frame = Frame(self.top) 
     self.frame.pack() 
     for i, c in zip(self.check, self.var): 
      if c.get() == 1: 
       Label(self.frame, text=i.cget("text")).pack() 

root = Tk() 
App(root) 
root.mainloop() 

Sinon, vous trouverez peut-être qu'un Listbox accomplit ce que vous veulent et (OMI) ressemble beaucoup plus propre et plus facile à utiliser:

from tkinter import * 

class App: 
    def __init__(self, root): 
     self.root = root 
     self.listbox = Listbox(self.root, selectmode=MULTIPLE) 
     self.listbox.pack() 
     for i in range(10): 
      self.listbox.insert(END, "Option "+str(i)) 

root = Tk() 
App(root) 
root.mainloop() 

En utilisant le Listbox vous n'auriez probablement même pas besoin de deux fenêtres car la sélection montre clairement quelles options sont sélectionnées en les mettant en surbrillance.