设置值后,tkinter上的CheckButton不是“On”

时间:2015-06-10 18:45:58

标签: python tkinter

我最近将程序中的几何管理器从网格更改为打包,因为尝试在框架中获取Navigatiotoolbar时出现问题。

问题是默认情况下,以前默认打开的复选按钮现在默认为On。这是按钮的代码:

    Var1=IntVar()
    Var1.set(1)
    c = tk.Checkbutton(self,text="Test", variable=Var1, onvalue=1,  offvalue=0)
    c.pack( side = LEFT )

因此,如果我更改几何管理器,我就不能再设置ON默认状态了吗?

的Pd。该程序运行没有错误。

这是一段更完整的代码

class StartPage(tk.Tk):


def __init__(self, *args, **kwargs):

    tk.Tk.__init__(self, *args, **kwargs)

    Frame1 = Frame(self)
    Frame1.pack(side=TOP)

    Frame2 = Frame(self)
    Frame2.pack( side= TOP )

    Frame3 = Frame(self)
    Frame3.pack( side = TOP)

    Frame4 = Frame(self)
    Frame4.pack( side = BOTTOM , pady=20, expand=True)

    label = tk.Label(Frame1, text="Start Page")
    label.pack(side=TOP)

    button1=ttk.Button(Frame2, text="Visit Page 1",
                      command=lambda:controller.show_frame(PageOne))
    button1.pack( side = LEFT )


    button2=ttk.Button(Frame3, text="Page Two",
                      command=lambda:controller.show_frame(PageTwo) )
    button2.pack( side = LEFT )


    button3=ttk.Button(Frame2, text="Spider",
                      command=lambda:controller.show_frame(PageThree) )
    button3.pack( side = LEFT )

    button4=ttk.Button(Frame2, text="Ternario",
                      command=lambda:controller.show_frame(PageFour) )
    button4.pack( side = LEFT )

    button5=ttk.Button(Frame3, text="Ti-Zr-Yx3",
                      command=lambda:controller.show_frame(PageFive) )
    button5.pack( side = LEFT )

    #global Var1

    Var1=IntVar()
    Var1.set(1)
    c = tk.Checkbutton(self,text="Test", variable=Var1, onvalue=1, offvalue=0)
    c.pack( side = LEFT )


app = StartPage()
app.mainloop()

1 个答案:

答案 0 :(得分:2)

看起来Var1__init__函数的末尾被垃圾收集,使得Checkbutton在窗口开始渲染之前忘记了它的状态。一种可能的解决方法是将Var1保存为实例的属性,因此它不会过早死亡。

    self.Var1=IntVar()
    self.Var1.set(1)
    c = tk.Checkbutton(self,text="Test", variable=self.Var1, onvalue=1, offvalue=0)
    c.pack( side = LEFT )

......或者根本就没有IntVar。

    c = tk.Checkbutton(self,text="Test")
    c.pack( side = LEFT )
    c.select()