2017-08-16 56 views
2

我有一個程序,我正在努力,並希望用戶選擇他們的興趣,當他們完成按提交。如果至少有一個按鈕被選中,我將如何僅允許用戶按提交。如何強制用戶選擇至少一個檢查按鈕

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

附:請注意,您應該使用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() 
相關問題