2017-10-14 37 views
1

我想在新窗口的新列表中显示从我的复选框列表中选择的选项,并在浏览时返回主屏幕 (使用Python 3.5与Ubuntu 16.04)。在复选框中显示选中的选项到下一个tkinter窗口中的新列表

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

您的问题不包括问题。你告诉我们你想要什么,但没有解释你需要帮助。 –

回答

0

假设我理解正确的话,如果你想做到这一点与Checkbutton是你可以做类似下面:

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() 

另外,你可能会发现一个Listbox完成你想和(IMO)看起来很多更清洁,更人性化:

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() 

使用Listbox您可能甚至不需要两个窗口,因为所选内容很清楚地显示通过突出显示哪些选项。

相关问题