如何设置TkInter小部件的默认值?

时间:2014-10-14 15:24:25

标签: python tkinter

当我打开窗口时,我有一个我需要勾选的Checkbutton作为默认值。将变量设置为on值似乎不起作用,那么我该怎么办? 这是一个简短的,自包含的示例,其中包含未复制的复选框。

#!/usr/bin/python3

from tkinter import ttk
from tkinter import *
class Sizzle(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)   

        self.parent = parent

        self.initUI()
    def initUI(self):
        self.parent.title("Sizzle")
        self.style = ttk.Style()
        self.style.theme_use("default")
        self.pack(fill=BOTH, expand=1)
        ifalphagrams=BooleanVar()
        b=Checkbutton(self, variable=ifalphagrams, onvalue=True, offvalue=False)
        b.grid(row=1,column=3 ,sticky=W)
        b.select()
def main():

    root = Tk()
    root.geometry("700x700+700+700")
    app = Sizzle(root)
    root.mainloop()  
if __name__ == '__main__':
    main()  

1 个答案:

答案 0 :(得分:1)

很可能你正在使用一个局部变量来保存对StringVar的引用,并且它正在收集垃圾。当您阻止变量被垃圾收集时,您的代码可以正常工作:

from Tkinter import *

class Example(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)

        ifalphagrams = StringVar()
        alp = Checkbutton(self, variable=ifalphagrams, onvalue='yes', offvalue='no')
        alp.grid(row=1,column=3, sticky=W)
        alp.select()
        self.ifalphagrams = ifalphagrams

if __name__ == "__main__":
    root = Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()