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()
由于您没有指定 Checkbutton
的 variable
选项,因此使用默认值,即 Checkbutton
在其父项中的名称(即按钮 window 的路径名)。
由于firstname_chk
和badgeid_chk
分别是filter_by_left
和filter_by_right
中的第一个Checkbutton
,所以他们的名字都是!checkbutton
。因此它们共享隐式创建的相同 tkinter 变量,它们的状态将同时更改。
同样适用于 surname_chk
和 position_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()
为什么当我只点击一个时,两个复选框都会被选中?右侧和不同框架中的复选框,以及左侧的复选框。每个复选框的变量也不同。任何人都知道可能导致这种情况的原因是什么? 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()
由于您没有指定 Checkbutton
的 variable
选项,因此使用默认值,即 Checkbutton
在其父项中的名称(即按钮 window 的路径名)。
由于firstname_chk
和badgeid_chk
分别是filter_by_left
和filter_by_right
中的第一个Checkbutton
,所以他们的名字都是!checkbutton
。因此它们共享隐式创建的相同 tkinter 变量,它们的状态将同时更改。
同样适用于 surname_chk
和 position_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()