python tkinter 复选框立即被勾选

python tkinter checkboxes get ticked at once

为什么当我只点击一个时,两个复选框都会被选中?右侧和不同框架中的复选框,以及左侧的复选框。每个复选框的变量也不同。任何人都知道可能导致这种情况的原因是什么? https://imgur.com/a/bQkrMsk

# Child of [right_content] {FILTER}
filter_by = Frame(right_content,
                  width=380,
                  height=50,
                  padx=5,
                  pady=5)
filter_by.pack(fill='x')

# Child of [filter_by] {RIGHT}
filter_by_right = Frame(filter_by,
                        width=190)
filter_by_right.pack(side='right')

# Child of [filter_by] {LEFT}
filter_by_left = Frame(filter_by,
                       width=190,
                       padx=10,
                       pady=5)
filter_by_left.pack(side='left')

firstname_chk = Checkbutton(filter_by_left, text='Search by Firstname')
firstname_chk.pack()
surname_chk = Checkbutton(filter_by_left, text='Search by Surname')
surname_chk.pack()
badgeid_chk = Checkbutton(filter_by_right, text='Search by BadgeID')
badgeid_chk.pack()
position_chk = Checkbutton(filter_by_right, text='Search by Position')
position_chk.pack()

由于您没有指定 Checkbuttonvariable 选项,因此使用默认值,即 Checkbutton 在其父项中的名称(即按钮 window 的路径名)。

由于firstname_chkbadgeid_chk分别是filter_by_leftfilter_by_right中的第一个Checkbutton,所以他们的名字都是!checkbutton。因此它们共享隐式创建的相同 tkinter 变量,它们的状态将同时更改。

同样适用于 surname_chkposition_chk

您需要为那些Checkbutton分配不同的 tkinter 变量。

var1 = BooleanVar()
firstname_chk = Checkbutton(filter_by_left, text='Search by Firstname', variable=var1)
firstname_chk.pack()

var2 = BooleanVar()
surname_chk = Checkbutton(filter_by_left, text='Search by Surname', variable=var2)
surname_chk.pack()

var3 = BooleanVar()
badgeid_chk = Checkbutton(filter_by_right, text='Search by BadgeID', variable=var3)
badgeid_chk.pack()

var4 = BooleanVar()
position_chk = Checkbutton(filter_by_right, text='Search by Position', variable=var4)
position_chk.pack()