我尝试创建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()`
任何建议,想法或解决方案对我做错了都会有所帮助。
谢谢
答案 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)
...
您不能以这种方式混合pack
和grid
。对于f
内的所有小部件,您必须使用其中一个。