2013-12-11 61 views

回答

0

請勿使用複選框;改用radoibuttons。複選框和單選按鈕的行爲已經確立 - 複選框允許您選擇N個選項中的N個,單選按鈕的設計允許您精確選擇1個N.不要違反此設計模式,否則用戶會感到困惑。

要使單選按鈕正常工作,請創建一個StringVar並將其與兩個或更多單選按鈕相關聯。所有共享相同變量的單選按鈕將作爲一個集合工作,只允許選擇一個。

0

雖然OP沒有說明,但如果您正在進行多項選擇測驗,則某些問題可能需要特定的複選框互斥。或者,要求用戶最多選擇N個複選框中的M個,並且在問題中具體說明了這一要求,以便用戶理解設計模式。要做到這一點,你可以採取Checkbuttons回調選項的優勢:

from Tkinter import * 
master = Tk() 

choices = [IntVar() for x in range(4)] 
now = None 
buttons = None 
def cb(): 
    global now, buttons 
    if None != now: 
    buttons[now].deselect() 
    vals = [choices[i].get() for i in range(4)] 
    try: now = vals.index(1) 
    except ValueError: now = None 
    print "variables are",str([choices[i].get() for i in range(4)]) 

buttons = [Checkbutton(master, text="Choice "+str(i), variable=choices[i], command=cb) for i in range(4)] 
for b in buttons: b.pack() 

mainloop() 

這個例子回答OP的具體問題,但可以進一步擴展做出的複選框,在特定情況下的操作合法的變化。