Python 在tkinter中创建多个复选框
我试图创建3组不同长度的复选框列表,然后在tkinter GUI的页面上以三列显示它们。列表1是基于整数的列表,2和3是字符串。这些列表名称的变量在GUI启动之前在代码中定义。Python 在tkinter中创建多个复选框,python,user-interface,checkbox,tkinter,Python,User Interface,Checkbox,Tkinter,我试图创建3组不同长度的复选框列表,然后在tkinter GUI的页面上以三列显示它们。列表1是基于整数的列表,2和3是字符串。这些列表名称的变量在GUI启动之前在代码中定义。 N_索引=[1,2,3] T_索引=[T1,T2,T3] P_索引=[P1,P2,P3] 每次运行代码时,列表的长度都会改变,因此我使用了以下方法: N_leng=range(1,int(len(N_索引)+1)) T_leng=范围(1,int(len(T_索引)+1)) P_leng=范围(1,int(len(P_索
N_索引=[1,2,3]
T_索引=[T1,T2,T3]
P_索引=[P1,P2,P3]
每次运行代码时,列表的长度都会改变,因此我使用了以下方法:
N_leng=range(1,int(len(N_索引)+1))
T_leng=范围(1,int(len(T_索引)+1))
P_leng=范围(1,int(len(P_索引)+1))
我部分用于创建GUI的代码取自此处(谢谢)
我正试着把这些清单放到第一页
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()`
对于我做错了什么,任何建议、想法或解决方案都会有帮助
谢谢问题在于,您使用的标签是
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
中的所有小部件,必须使用其中一个。在哪里创建根窗口?ckbox\u参数
如何知道f
?如果你发布一个。你为什么要做int(len(…)
len
返回一个整数。抱歉,PM 2Ring我不知道您需要多少信息。我对这一切都很陌生,这是我第一次尝试OOP,所以我会犯错误。