2016-04-22 145 views
-1

我试图创建3组不同长度的复选框列表,然后在tkinter GUI中的页面上的三列中显示它们。列表1将是一个基于整数的列表,其中2个是字符串。这些列表名称的变量在GUI启动之前在代码中定义。 N_index = [1, 2, 3] T_index = [T1, T2, T3] P_index = [P1, P2, P3]在tkinter中创建多个复选框

的列表的长度将每个代码运行所以时间改变我已经使用这个:

N_leng = range(1, int(len(N_index)+1)) T_leng = range(1, int(len(T_index)+1)) P_leng = range(1, int(len(P_index)+1))

我已经部分使用的代码来创建我的GUI是从这里取的Switch between two frames in tkinter(谢谢)

我试图将这些列表放入第一页。我有3组复选框。当我运行它运行的代码并且永远不会结束。但是即使在调试模式下它也不会产生错误。有人能发现我的错误吗?

def ckbox_params(): 
     for i, j in zip(N_index, N_leng): 
      ivar = tk.IntVar() 
      N_selection1 = tk.Checkbutton(f, text="%d" % i, variable=ivar, onvalue=i, offvalue="") 
      N_selection1.grid(sticky="nw", pady=4) 

     for i, k in zip(T_index, T_leng): 
      svar = tk.StringVar() 
      T_selection1 = tk.Checkbutton(f, text="%s" % i, variable=svar, onvalue=i, offvalue="") 
      T_selection1.grid(sticky="nw", pady=4) 

     for i, l in zip(P_index, P_leng): 
      svar = tk.StringVar() 
      P_selection1 = tk.Checkbutton(f, text="%s" % i, variable=svar, onvalue=i, offvalue="") 
      P_selection1.grid(sticky="nw", pady=4) 
    ckbox_params()` 

任何建议,想法或解决方案将有助于我做错了什么。

谢谢

+0

你在哪里创建根窗口? 'ckbox_params'如何知道'f'?如果您发布[mcve],这将有所帮助。 –

+0

你为什么要做int(len(...))'? 'len'返回一个int。 –

+0

对不起PM 2Ring我不知道你需要多少信息。我对这一切都很陌生,这是我第一次尝试OOP,所以我犯了错误。 – OParker

回答

1

的问题是,你正在使用pack的标签,grid的复选框,但无论是标签和复选框共享相同的父。

class PageOne(tk.Frame): 

    def __init__(self, parent, controller): 
     ... 
     label = ttk.Label(f, text="Page One", font=LARGE_FONT) 
     label.pack(pady=10, padx=10) 
     ... 
     N_selection1 = tk.Checkbutton(f, text="%d" % i, variable=ivar, onvalue=i, offvalue="") 
     N_selection1.grid(sticky="nw", pady=4) 
     ... 

这样,你就不能混用packgrid。对于所有直接位于f内的小部件,您必须使用其中一个。

+0

你是绝对正确的谢谢你!现在工作! – OParker