我最近将程序中的几何管理器从网格更改为打包,因为尝试在框架中获取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()
答案 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()