2014-02-24 25 views
2

下午好!爲什麼我必須雙擊才能更改我的按鈕對象的浮雕? (tkinter)

爲什麼我必須雙擊才能更改我的按鈕對象的浮雕?

在我的方法結合,我的第一個參數是扣1,我不明白...

這裏是我的代碼,謝謝提前。

from tkinter import * 

def sunken(event): 
    button = event.widget # détecte le bouton sur lequel on clique 
    button['relief'] = 'sunken' # changement de relief 

root = Tk() 

for i in range(8): 
    for j in range(8): 
     myButton = Button(root, text='', relief='raised') 
     myButton.grid(row=i, column=j) 
     myButton.bind("<Button-1>", sunken) 

root.mainloop() 

Python 3.x都有

我,我的英語道歉,我是法國人...

+3

我不認爲我應該把這個作爲答案,因爲我不確定,但也許它與這樣一個事實有關,即當單擊Button時,它的'relief'將被'tkinter'自動更改爲'SUNKEN',然後再次恢復正常。我還注意到,你不需要點擊兩次,但如果兩次點擊同一個按鈕的時間超過10秒,它就不會下沉。這導致我相信在這個時間框架中兩個'relief'配置是相沖突的。 –

+0

我同意,這是關於按鈕的默認行爲。如果使用輸入字段替換按鈕,則按預期工作。你可能會認爲一個按鈕默認綁定到一個左鍵事件,所以使用一個命令來回調你的按鈕內的函數可能會很好地爲你服務,比如Button(root,text ='',command = sunken) 。當然,你需要改變生成按鈕的方式,或者想出一些其他解決方法來將想要更改的按鈕傳遞給該函數。祝你好運! – atlasologist

+0

@亞歷克斯,謝謝你,你把這個bug放在我耳邊,我發佈了很好的迴應 – Fred

回答

1

我的問題的響應

from tkinter import * 

def sunken(event): 
    button = event.widget # detecte le bouton sur lequel on clique 
    button['relief'] = 'sunken' # changement de relief 

root = Tk() 

for i in range(8): 
    for j in range(8): 
     myButton = Button(root, text='', state='disabled') 
     myButton.grid(row=i, column=j) 
     myButton.bind("<Button-1>", sunken) 

root.mainloop() 
+0

這是問題的答案嗎?我不明白。你是說禁用按鈕可以解決你的問題嗎? –

+0

@Bryan,是的,我應該澄清我的按鈕是禁用。默認情況下,我的按鈕是正常的,它的工作原理... – Fred

+0

@Bryan,當我的按鈕被禁用時,我認爲唯一的事件被考慮在內。 – Fred

相關問題