[問題] 請問有人可以幫我看一下Tkinter嗎???謝謝!!

作者: aeronan (aeron)   2014-05-02 13:17:33
我這寫出來,不管按哪一個button只會顯示橘色,有辦法讓它顯示相對應的顏色嗎??
from Tkinter import *
the_window = Tk()
the_window.title('ONE Button Colour')
start_color = 'grey'
label_bg = ['red', 'Green', 'Blue', 'Yellow', 'Orange']
button_color = ['Red', 'Green', 'Blue', 'Yellow', 'Orange']
label_colour = StringVar()
def change_colour():
if label_colour.get() == 'r':
colour['bg'] = 'red'
elif label_colour.get() == 'g':
colour['bg'] = 'green'
elif label_colour.get() == 'b':
colour['bg'] = 'blue'
elif label_colour.get() == 'y':
colour['bg'] = 'yellow'
else:
colour['bg'] = 'orange'
for r in range(5):
#for c in range(2):
colour = Label(the_window, bg = start_color, compound = 'bottom',
width = 8,height = 1)
colour.grid(row=r,column=0, padx = 2, pady = 3)
Button(the_window, text = button_color[r], command = change_colour,
width = 8,height = 1 ).grid(row=r,column=1, padx = 2, pady = 7)
the_window.mainloop()
作者: Pomay (右腳)   2014-05-02 13:42:00
判斷式label_colour.get()的值沒有被改變,所以都跑else不太懂你指的"對應"是怎麼對應,row1 btn按完row1 label變色?還是row1 button按完 row0~4 label全變色?
作者: aeronan (aeron)   2014-05-02 14:00:00
就是按red button,然後就會顯示一個紅色,我現在就是隨便橘色,不知道應該要怎麼改會比較好???
作者: Microscft (小軟哥)   2014-05-02 14:07:00
你那一串label_bg是幹嘛用的只有跑橘色 就是你的if else判斷式有問題看一下StringVar的get()的說明文件
作者: aeronan (aeron)   2014-05-02 14:25:00
我把那一串label_bg刪了,因為還在初學摸索階段,所以我找了好久還是找不到問題在哪...
作者: LiloHuang (十年一刻)   2014-05-02 16:33:00
坦白說不太懂 colour = Label(...) 每次都覆蓋的目的@@這樣不管哪顆按鈕按下去,應該只會更新最後一個 label
作者: aeronan (aeron)   2014-05-02 19:05:00
其實我現在就是不知道要怎麼寫可以叫出那個value...有哪位大大可以幫忙嗎???超級感謝!!!
作者: s860134 (s860134)   2014-05-02 19:30:00
關鍵在於 程式碼中的colour 只是一個pointer指到Label obj所以在for 迴圈跑完 他只會指到最後一個Label obj
作者: aeronan (aeron)   2014-05-02 19:46:00
所以我不能用迴圈?要改成把button分開打?
作者: LiloHuang (十年一刻)   2014-05-02 20:08:00
我想我上面有提到,每次都覆蓋這件事情跟你要的有衝突你可以考慮用一個 list 把生成出來的 label obj 記住假設有 labels = [] 然後 labels.append(colour) 之類的或者弄一個 dict 也是可以, key 是顏色的字串之類的
作者: aeronan (aeron)   2014-05-02 20:55:00
謝謝各位大大的幫忙~~:)

Links booklink

Contact Us: admin [ a t ] ucptt.com