2014-10-14 3 views
0

У меня есть контрольная кнопка, которую мне нужно пометить как значение по умолчанию при открытии окна. Установка переменной в значение on не работает, поэтому что мне делать? Вот короткий, самодостаточный пример того, что дает беспорядочный флажок.Как установить значение по умолчанию для виджета TkInter?

#!/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() 
+0

'onvalue' и' offvalue' установить значение, связанное с этими состояниями, они фактически не изменяют состояние. Вы связываете его с переменной «variable» и убедитесь, что эта переменная отражает «onvalue», или вызывается 'select' (см., Например, http://effbot.org/tkinterbook/checkbutton.htm). – jonrsharpe

+1

. моя машина, как только я добавлю все необходимые импорты и 'mainloop' и т. д. Возможно, в некотором коде, который вы написали, есть проблема, которую вы нам не показали. Пожалуйста, напишите [короткий, самостоятельный, исполняемый пример] (http://sscce.org/), который показывает вашу проблему. – Kevin

+0

Это очень хорошо может быть ошибка импорта - я просто погружаюсь в ТЗ. Во всяком случае, я опубликовал пример, если вы можете помочь. – user2998946

ответ

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() 
+0

Это было на месте, спасибо кучи – user2998946

+0

Ahh да, забыл про эту маленькую «особенность». – mgilson

Смежные вопросы