2017-02-17 2 views
0

私はチェックボックスを作成しました。作成したチェックボックスをチェックすると、プログラムは「python」をプリントします。 でも動作しません...エラーは出ませんが、 'python'は表示されません 助けてください。 これはどのチェックボタンがチェックされましたか

#!/usr/bin/python3 

from tkinter import * 
class Checkbar(Frame): 
    def __init__(self, parent=None, picks=[], side=LEFT, anchor=W): 
     Frame.__init__(self, parent) 
     self.vars = [] 
     for pick in picks: 
     var = IntVar() 
     chk = Checkbutton(self, text=pick, variable=var) 
     chk.pack(side=side, anchor=anchor, expand=YES) 
     self.vars.append(var) 
    def state(self): 
     return map((lambda var: var.get()), self.vars) 
    def __getitem__(self,key): 
     return self.vars[key] 


if __name__ == '__main__': 
    root = Tk() 
    lng = Checkbar(root, ['Python', 'Ruby', 'Perl', 'C++']) 
    tgl = Checkbar(root, ['English','German']) 
    lng.pack(side=TOP, fill=X) 
    tgl.pack(side=LEFT) 
    lng.config(relief=GROOVE, bd=2) 


    def allstates(): 

##  print(lng[0]) 

     if lng[0] == 1: 
     print ('python') 


    Button(root, text='Quit', command=root.quit).pack(side=RIGHT) 
    Button(root, text='Peek', command=allstates).pack(side=RIGHT) 
    root.mainloop() 

答えて

0

lng[0]私のコードであることはIntVar、ないintあるので、1に等しいことはありません。

あなたは1に、変数の値を比較することgetメソッドを使用する必要があります。

def allstates(): 
    if lng[0].get() == 1: 
     print ('python') 

別の解決策は、それが代わりに変数の値を返すようにCheckbar__getitem__方法を変更することです私はこの場合、Python Form: Using TKinter --> run script based on checked checkboxes in GUI

def __getitem__(self, key): 
    return self.vars[key].get() 

への回答で提案されたように、変数自体が、あなたはallstates機能を変更する必要はありません。

+0

ありがとうございました...私は変数 '' lng [0] ''とその値を別のclass.what shoudで使用したい場合は – feri

+0

になりました。 – feri

+0

もしlng [0] .get(): 'は、if lng [0] .get()== 1:'よりもコードを書くためのもっとpyhonicな方法です。 – pkqxdd

関連する問題