在tkinter中创建多个复选框

时间:2016-04-22 11:23:34

标签: python user-interface checkbox tkinter

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

每次运行代码时,列表的长度都会改变,所以我使用了这个:

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

我试图将这些列表放入第一页。

class PageOne(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        f = tk.Frame(self)
        f.pack(side="left")

        label = ttk.Label(f, text="Page One", font=LARGE_FONT)
        label.pack(pady=10, padx=10)

然后我有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()`

任何建议,想法或解决方案对我做错了都会有所帮助。

谢谢

1 个答案:

答案 0 :(得分: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内的所有小部件,您必须使用其中一个。