Python Tkinter Checkbutton在Topframe窗口中未显示为选中状态

时间:2020-05-28 13:08:55

标签: python button tkinter toplevel

使用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无处存储其状态,因此我们需要保留对其的引用,以使它不会消失。

0 个答案:

没有答案