2017-01-06 2 views
0

Я попытался использовать checkbutton виджет вместе с булевой переменной. Когда я использовал скрипт без класса - он работал, но когда я написал приложение как класс, это не так. Вот мой код:tkinter: как связать checkbutton с переменной

from tkinter import Tk, Frame, Checkbutton, Button 

class MyFrame(Frame): 

    def __init__(self, parent): 

     Frame.__init__(self, parent) 
     self.parent = parent 

     self.test01 = False 

     checkbutton = Checkbutton(parent, text='check it', 
     variable=self.test01, command=self.testcheck) 
     checkbutton.var = self.test01 
     checkbutton.pack() 

     testbutton = Button(parent, text='check test', command=self.testcheck) 
     testbutton.pack() 
     self.parent.title('Checkbutton test') 


    def testcheck(self): 

     print('Check test: ' + str(self.test01)) 

def main(): 

    root = Tk() 
    app = MyFrame(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

The checkbutton problem

На картинке вы можете увидеть терминал с выходом программы. В случае на картинке приложение было запущено, и каждая комбинация переключения кнопки проверки и нажатия кнопки теста не дала никаких результатов.

Я попытался связать переменную в конструкторе, после того как кнопка была построена, и то и другое - без результатов.

Пожалуйста, дайте мне знать, как это сделать.

Заранее благодарен.

+0

вы не можете использовать обычную переменную в качестве значения опции 'variable'. Вы должны использовать одну из специальных переменных tkinter ('StringVar',' BooleanVar' и т. Д.). –

+0

Спасибо. Я прочитал ответ ниже (1), и он работает как шарм! – khaz

ответ

2

Использование BooleanVar. Для получения состояний используется {variable}.get().

from tkinter import Tk, Frame, Checkbutton, Button, BooleanVar 

class MyFrame(Frame): 

    def __init__(self, parent): 

     Frame.__init__(self, parent) 
     self.parent = parent 
     self.test01 = BooleanVar() 
     checkbutton = Checkbutton(parent, text='check it', 
     variable=self.test01, command=self.testcheck) 

     checkbutton.pack() 

     testbutton = Button(parent, text='check test', command=self.testcheck) 
     testbutton.pack() 
     self.parent.title('Checkbutton test') 


    def testcheck(self): 

     print('Check test: ' + str(self.test01.get())) 

def main(): 

    root = Tk() 
    app = MyFrame(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

enter image description here

+0

Большое спасибо eyllanesc! Вы отправили такой точный ответ и точное решение, с изменениями, которые были необходимы - это сработало! С наилучшими пожеланиями :) – khaz

+0

@khaz Если бы мой ответ помог вам, вы могли бы отметить его как правильное. – eyllanesc

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