2017-08-16 1 views
2

Ich habe ein Programm, an dem ich arbeite und möchte, dass der Benutzer seine Interessen auswählt, und wenn sie fertig sind, drücken Sie Senden. Wie würde ich dem Benutzer nur erlauben, auf "Senden" zu klicken, wenn mindestens eine Schaltfläche aktiviert ist?Wie erzwinge ich den Benutzer, um mindestens eine Schaltfläche auszuwählen

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 

Antwort

2

Sie benötigen eine Handler-Funktion hinzuzufügen, die mindestens ein Kästchen aktiviert ist, überprüft, ob vor dem Fenster zu zerstören.

Sie so leicht mit der folgenden Logik tun:

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. Beachten Sie, dass Sie BooleanVar und nicht IntVar für An-Aus-Kontrollkästchen verwenden sollten. Betrachten Sie auch adding a check am Fenster schließen.

0

Um die Handhabung zu vereinfachen, können Sie eine Liste von Interessen erstellen und diese dann verwenden, um alles zu wiederholen. Dadurch wird es auch Sachen hinzuzufügen, in der Zukunft zu erleichtern, zum Beispiel:

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