使用tkinter进行编程时,我发现Checkbutton小部件的行为非常奇怪。我用下面的代码重新创建了该错误:
import tkinter
from tkinter import *
def displayWelcomeScreen(root):
root2 = Toplevel(root)
root2.geometry('600x380')
root2.focus_set()
Checked = IntVar()
CheckButton1 = Checkbutton(root2, variable=Checked)
CheckButton1.place(relx=0.5, rely=0.5, anchor=CENTER)
CheckButton1.select()
# Create a dummy button that makes the Checkbutton appear checked to the user
#Button(root2, command= lambda event: Checked.get())
root = Tk()
root.geometry('700x400')
displayWelcomeScreen(root)
root.mainloop()
使用Toplevel(root)
创建一个新窗口并在其中放置一个Checkbutton时,即使我使用.select()
方法,该窗口也不会对用户显示为选中状态。
但是,当我创建一个虚拟按钮时,其命令中提到与我的Checkbutton相关联的IntVar,因此它会以某种方式初始化为正确选中状态。几乎就像编译器会检查Checkbutton是否有用,并基于此决定是否将其显示为选中状态。
编辑:肯定会在后台检查Checkbutton,因为如果我在print(Checked.get())
命令之前和之后运行CheckButton1.select()
,则该值将被更改,只是对用户而言不会出现。>
有人知道为什么会这样吗?
编辑2:由于jasonharper的解释,我添加了行CheckButton1.intvar = Checked
,它的工作不需要虚拟按钮。当函数超出范围时,Checked变量丢失,因此Checkbutton无处存储其状态,因此我们需要保留对其的引用,以使它不会消失。