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

看板Python作者 (aeron)時間10年前 (2014/05/02 13:17), 編輯推噓2(2020)
留言22則, 5人參與, 最新討論串1/2 (看更多)
我這寫出來,不管按哪一個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() -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.241.220.100 ※ 文章網址: http://www.ptt.cc/bbs/Python/M.1399007855.A.BF4.html

05/02 13:42, , 1F
判斷式label_colour.get()的值沒有被改變,所以都跑else
05/02 13:42, 1F

05/02 13:47, , 2F
不太懂你指的"對應"是怎麼對應,row1 btn按完row1 label變色?
05/02 13:47, 2F

05/02 13:47, , 3F
還是row1 button按完 row0~4 label全變色?
05/02 13:47, 3F

05/02 14:00, , 4F
就是按red button,然後就會顯示一個紅色,我現在就是隨便
05/02 14:00, 4F

05/02 14:01, , 5F
橘色,不知道應該要怎麼改會比較好???
05/02 14:01, 5F

05/02 14:07, , 6F
你那一串label_bg是幹嘛用的
05/02 14:07, 6F

05/02 14:10, , 7F
只有跑橘色 就是你的if else判斷式有問題
05/02 14:10, 7F

05/02 14:11, , 8F
看一下StringVar的get()的說明文件
05/02 14:11, 8F

05/02 14:25, , 9F
我把那一串label_bg刪了,因為還在初學摸索階段,所以我
05/02 14:25, 9F

05/02 14:26, , 10F
找了好久還是找不到問題在哪...
05/02 14:26, 10F

05/02 16:33, , 11F
坦白說不太懂 colour = Label(...) 每次都覆蓋的目的@@
05/02 16:33, 11F

05/02 16:35, , 12F
這樣不管哪顆按鈕按下去,應該只會更新最後一個 label
05/02 16:35, 12F

05/02 19:05, , 13F
其實我現在就是不知道要怎麼寫可以叫出那個value...
05/02 19:05, 13F

05/02 19:05, , 14F
有哪位大大可以幫忙嗎???超級感謝!!!
05/02 19:05, 14F

05/02 19:30, , 15F
關鍵在於 程式碼中的colour 只是一個pointer指到Label obj
05/02 19:30, 15F

05/02 19:31, , 16F
所以在for 迴圈跑完 他只會指到最後一個Label obj
05/02 19:31, 16F

05/02 19:46, , 17F
所以我不能用迴圈?要改成把button分開打?
05/02 19:46, 17F

05/02 20:08, , 18F
我想我上面有提到,每次都覆蓋這件事情跟你要的有衝突
05/02 20:08, 18F

05/02 20:09, , 19F
你可以考慮用一個 list 把生成出來的 label obj 記住
05/02 20:09, 19F

05/02 20:11, , 20F
假設有 labels = [] 然後 labels.append(colour) 之類的
05/02 20:11, 20F

05/02 20:12, , 21F
或者弄一個 dict 也是可以, key 是顏色的字串之類的
05/02 20:12, 21F

05/02 20:55, , 22F
謝謝各位大大的幫忙~~:)
05/02 20:55, 22F
文章代碼(AID): #1JOofllq (Python)
文章代碼(AID): #1JOofllq (Python)