TL; DR
您需要为
variable每个复选框指定一个唯一。
var_L1 = tk.IntVar()var_R1 = tk.IntVar()...check_L1 = Checkbutton(..., variable=var_L1)check_R1 = Checkbutton(..., variable=var_R1)...
怎么了
复选按钮需要与变量关联。您没有显式设置变量,因此tkinter会创建默认值。Tkinter通过创建以复选按钮名称命名的内部变量来实现此目的。
当您创建窗口小部件并且不给它们命名时,tkinter将选择默认名称。全名包括整个窗口小部件层次结构的名称。因此,举例来说,内部名称
check_L1是
.!frame.!checkbutton',对于名称
check_R1为
.!frame2.!checkbutton,而对于内部名称
checktype1是
'.!frame3.!checkbutton'。
当tkinter为复选按钮创建默认变量时,它仅使用变量全名的最后一部分。因此,为此
check_L1创建了一个名为的内部变量
!checkbutton。的内部变量
check_R1也
!checkbutton与的内部变量相同
checktype2。
因为所有这些检查按钮共享相同的内部变量,所以它们被链接了。
注意:如果要在循环中创建许多复选框,则可以将对每个复选框的引用保存到数组中。例如:
vars = []for i in range(x): vars.append[tk.IntVar())...check_L1 = Checkbutton(..., variable=vars[0])...print(f"the value of L1 is {vars[0].get()}")


