2017-08-16 22 views
2

私は自分の興味を選んで、実行したら、submitを押してください。少なくとも1つのボタンがチェックされている場合、ユーザーがサブミットを押すことを許可するにはどうすればよいですか?少なくとも1つのチェックボタンをユーザに選択させる方法

from tkinter import * 

check = Tk() 
check.title("Interests") 
CheckVar1 = IntVar() 
CheckVar2 = IntVar() 
CheckVar3 = IntVar() 
CheckVar4 = IntVar() 
CheckVar5 = IntVar() 


C1 = Checkbutton(check, text = "Horror", variable = CheckVar1, \ 
       onvalue = 1, offvalue = 0, height=1, \ 
       width = 20) 
C2 = Checkbutton(check, text = "Action", variable = CheckVar2, \ 
       onvalue = 1, offvalue = 0, height=1, \ 
       width = 20) 
C3 = Checkbutton(check, text = "Documentary", variable = CheckVar3, \ 
       onvalue = 1, offvalue = 0, height=1, \ 
       width = 20) 
C4 = Checkbutton(check, text = "Science fiction", variable = CheckVar4, \ 
       onvalue = 1, offvalue = 0, height=1, \ 
       width = 20) 
C5 = Checkbutton(check, text = "Comedy", variable = CheckVar5, \ 
       onvalue = 1, offvalue = 0, height=1, \ 
       width = 20) 

submit_btn = Button(check, text = "Submit", command = lambda: check.destroy())  


C1.pack() 
C2.pack() 
C3.pack() 
C4.pack() 
C5.pack() 
submit_btn.pack() 
check.mainloop() 

if CheckVar1.get(): 
    #dosomething 
if CheckVar2.get(): 
    #dosomething 
if CheckVar3.get(): 
    #dosomething 
if CheckVar4.get(): 
    #dosomething 
if CheckVar5.get(): 
    #dosomething 

答えて

2

あなたは窓を破壊する前に、少なくとも一つのボックスがチェックされているかどうかをチェックするハンドラ関数を追加する必要があります。

次のロジックで簡単に行うことができます。

from tkinter import * 
from tkinter import messagebox 

check = Tk() 
check.title("Interests") 

CheckVar1 = BooleanVar() 
CheckVar2 = BooleanVar() 
CheckVar3 = BooleanVar() 
CheckVar4 = BooleanVar() 
CheckVar5 = BooleanVar() 


C1 = Checkbutton(check, text = "Horror", variable = CheckVar1, \ 
       onvalue = 1, offvalue = 0, height=1, \ 
       width = 20) 
C2 = Checkbutton(check, text = "Action", variable = CheckVar2, \ 
       onvalue = 1, offvalue = 0, height=1, \ 
       width = 20) 
C3 = Checkbutton(check, text = "Documentary", variable = CheckVar3, \ 
       onvalue = 1, offvalue = 0, height=1, \ 
       width = 20) 
C4 = Checkbutton(check, text = "Science fiction", variable = CheckVar4, \ 
       onvalue = 1, offvalue = 0, height=1, \ 
       width = 20) 
C5 = Checkbutton(check, text = "Comedy", variable = CheckVar5, \ 
       onvalue = 1, offvalue = 0, height=1, \ 
       width = 20) 


def submitHandle(): 
    anyChecked = CheckVar1.get() | CheckVar2.get() | CheckVar3.get(
    ) | CheckVar4.get() | CheckVar5.get() 
    if anyChecked: 
     check.destroy() 
    else: 
     messagebox.showerror("Error", "Please check at least one.") 


submit_btn = Button(check, text="Submit", command=lambda: submitHandle()) 

C1.pack() 
C2.pack() 
C3.pack() 
C4.pack() 
C5.pack() 
submit_btn.pack() 
check.mainloop() 

P.S.をオン/オフチェックボックスにはBooleanVarを使用し、IntVarを使用しないことに注意してください。また、ウィンドウを閉じるとadding a checkと考えてください。

0

これを扱いやすくするために、興味のリストを作成して、すべてをループすることができます。これはまた、より簡単に、たとえば、将来的にものを追加して行います。

from tkinter import * 

check = Tk() 
check.title("Interests") 

def destroy(): 
    if 1 in [vars[interest].get() for interest in interests]: 
     check.destroy() 

interests = ["Horror", "Action", "Documentary", "Science fiction", "Comedy"] 

vars = {interest:IntVar() for interest in interests} 
boxes = [Checkbutton(check, text = interest, variable = vars[interest], \ 
       onvalue = 1, offvalue = 0, height=1, \ 
       width = 20) for interest in interests] 

submit_btn = Button(check, text = "Submit", command = destroy) 


tmp = [box.pack() for box in boxes] 
submit_btn.pack() 
関連する問題