2016-03-16 273 views
0

Python的標籤變化,我需要每一個我選擇一個不同的單選按鈕的時間來改變我的標籤背景顏色。在單選按鈕選擇

這裏是我的代碼的簡化例子。

Main_Window = Tk() 
Main_Window.title("Main Window") 
Main_Window.geometry("500x500+25+25") 

Label_1 = Label(Main_Window, text="Label 1", width=8, bg=Label_1_Color, fg="black", bd=2, relief=RIDGE, padx=2, pady=2) 
Label_1.pack(side=TOP, anchor=W) 
Label_2 = Label(Main_Window, text="Label 2", width=8, bg=Label_2_Color, fg="black", bd=2, relief=RIDGE, padx=2, pady=2) 
Label_2.pack(side=TOP, anchor=W) 
Label_3 = Label(Main_Window, text="Label 3", width=8, bg=Label_3_Color, fg="black", bd=2, relief=RIDGE, padx=2, pady=2) 
Label_3.pack(side=TOP, anchor=W) 
Label_4 = Label(Main_Window, text="Label 4", width=8, bg=Label_4_Color, fg="black", bd=2, relief=RIDGE, padx=2, pady=2) 
Label_4.pack(side=TOP, anchor=W) 

Radio_Group = IntVar() 
Radio_1 = Radiobutton(Main_Window, text="Option 1", bg="white", variable=Radio_Group, value=1) 
Radio_1.pack(side=BOTTOM, anchor=W) 
Radio_1.invoke() 
Radio_2 = Radiobutton(Main_Window, text="Option 2", bg="white", variable=Radio_Group, value=2) 
Radio_2.pack(side=BOTTOM, anchor=W) 
Radio_3 = Radiobutton(Main_Window, text="Option 3", bg="white", variable=Radio_Group, value=3) 
Radio_3.pack(side=BOTTOM, anchor=W) 
Radio_4 = Radiobutton(Main_Window, text="Option 4", bg="white", variable=Radio_Group, value=4) 
Radio_4.pack(side=BOTTOM, anchor=W) 
Radio_5 = Radiobutton(Main_Window, text="Option 5", bg="white", variable=Radio_Group, value=5) 
Radio_5.pack(side=BOTTOM, anchor=W) 

Main_Window.mainloop() 

我想他們改變這些條件多次,因爲我選擇不同的單選按鈕。

if Radio_Group.get() == 1: 
    Label_1_Color = "white" 
    Label_2_Color = "white" 
    Label_3_Color = "white" 
    Label_4_Color = "white" 
elif Radio_Group.get() == 2: 
    Label_1_Color = "red" 
    Label_2_Color = "white" 
    Label_3_Color = "white" 
    Label_4_Color = "white" 
elif Radio_Group.get() == 3: 
    Label_1_Color = "white" 
    Label_2_Color = "red" 
    Label_3_Color = "white" 
    Label_4_Color = "white" 
elif Radio_Group.get() == 4: 
    Label_1_Color = "white" 
    Label_2_Color = "white" 
    Label_3_Color = "red" 
    Label_4_Color = "white" 
else: 
    Label_1_Color = "white" 
    Label_2_Color = "white" 
    Label_3_Color = "white" 
    Label_4_Color = "red" 

我可以請一些hep如何實現這一目標嗎? 謝謝。

+0

什麼不工作是我不知道如何通過選擇單選按鈕來更改我的標籤顏色。我沒有收到特定的錯誤消息。我只是問我如何在每次選擇單選按鈕時更改我的標籤顏色。 if語句只是顯示了我想要使用我的單選按鈕的功能。 – GrandJoss

+0

我的錯誤。我誤解了。添加了幾個標籤,刪除了我的近距離投票(取而代之),並回答了問題。你需要插入只有十餘個字符,使其準確地工作,你必須這樣:-) –

回答

1

按照Tkinter docs at Effbot,可以回調添加到每個Radiobutton。通過command關鍵字傳遞可執行文件,該文件可以做任何你想做的事情。該選項在config下列出,但也可在__init__中獲得。在這種情況下,你可以把所需的代碼放到一個功能完全一樣,是和使用,作爲您的命令:

Main_Window = Tk() 
Main_Window.title("Main Window") 
Main_Window.geometry("500x500+25+25") 

Label_1 = Label(Main_Window, text="Label 1", width=8, bg=Label_1_Color, fg="black", bd=2, relief=RIDGE, padx=2, pady=2) 
Label_1.pack(side=TOP, anchor=W) 
... 

Radio_Group = IntVar() 

def setColor(): 
    if Radio_Group.get() == 1: 
     Label_1.configure(background="white") 
     Label_2.configure(background="white") 
     Label_3.configure(background="white") 
     Label_4.configure(background="white") 
    ... 

Radio_1 = Radiobutton(Main_Window, text="Option 1", bg="white", variable=Radio_Group, value=1, command=setColor) 
Radio_1.pack(side=BOTTOM, anchor=W) 
Radio_1.invoke() 
... 

...意味着你已經在這個問題的代碼。

Effbot article on callback commands有一整節涉及使用相同的回調多個按鈕的確切情況。在你的情況,你已經通過使用Radio_Group規避了這個問題。

爲了讓你的代碼看起來更漂亮並移除巨頭嵌套的if語句,你可以用列表,元組和循環。請注意,索引已更改爲基於0。例如:

Main_Window = Tk() 
Main_Window.title("Main Window") 
Main_Window.geometry("500x500+25+25") 

# A dictionary keyed by radio button containing sequences of colors for each label 

labels = [] 
#labelCount = 4 
for i in range(labelCount): 
    label = Label(Main_Window, text="Label {}".format(i + 1), width=8, bg='white', fg="black", bd=2, relief=RIDGE, padx=2, pady=2)) 
    label.pack(side=TOP, anchor=W) 
    labels.append(label) 

Radio_Group = IntVar() 

def setColor(): 
    radioIndex = Radio_Group.get() 
    for labelIndex in range(labelCount): 
     if labelIndex == radioIndex - 1: 
      color = 'red' 
     else: 
      color = 'white' 
     labels[labelIndex].configure(background=color) 

radios = [] 
#radioCount = 5 
for i in range(radioCount): 
    radio = Radiobutton(Main_Window, text="Option {}".format(i + 1), bg="white", variable=Radio_Group, value=i, command=setColor) 
    radio.pack(side=BOTTOM, anchor=W) 
    if i == 0: 
     radio.invoke() 
    radios.append(radio) 
+0

感謝的方式。第一個答案很好。第二個給我一個錯誤,但。標籤[i] .configure(background = color),IndexError:列表索引超出範圍。我會盡力弄清楚。謝謝。 – GrandJoss

+0

@GrandJoss。這是因爲它應該是'labels [labelIndex] .configure(backgroud = color)'。我修復了這個帖子。感謝您的支持。 –