2016-03-05 69 views
1

比方說,我有一個按鈕:如何使用小部件選項值作爲條件來製作if語句?

tl.config(bd=0 ,image=photo1 ,width="100",height="100",command=lambda: functionPlus(tl)) 

功能是:

def functionPlus(button): 

    global turn 

    if (turn==1 or turn==3 or turn==5 or turn==7 or turn==9): 
     button.config(image=photo2,width="100",height="100") 
     turn +=1 

    elif (turn==2 or turn==4 or turn==6 or turn==8) : 
     button.config(image=photo3,width="100",height="100") 
     turn+=1 

我想補充一個「如果」的功能,這將有作爲條件的圖像按鈕。例如:

if button.config(image=photo2 == True) : 
    anotherFunction() 

在此先感謝。

回答

5

首先,從來沒有使用表達模式something=something else == True!其次,請看this related (but not duplicate) question

如您所見,cget方法將返回選項的當前值。如this manual page mentions,cget類似於widget["option"]


所以,直接回答你的問題,if條件,你需要將線沿線的:

if button['image']==photo2: 
    anotherFunction() 
+0

好吧!感謝您的解決方案和您的建議,代碼現在正在工作。 –

0

我是新來的,無法評論。我希望我不是通過訴諸回答來炫耀SO政策。

@Tersosauros

「首先,從來沒有使用表達模式的東西=別的== 真!」

你在哪裏看到這種模式,爲什麼要避免它?什麼可以取代它? (我知道你是一個tersosaurus,但「從不使用X」似乎太過簡潔和無信息)。

@Arwan Credoz我知道你已經得到了你的答案,但是......如果你只是想檢查「turn」的值是否是偶數/奇數並且在給定範圍內,則使用邊界檢查,然後使用邊界檢查模數(也許這就是@Tersosauros暗示的?)。 此外,如果「turn」的值在範圍(0,10)內,則它的值總是會增加,所以不需要兩次寫入「turn + = 1」。如果我已經正確理解你的意圖,你可以重寫「functionPlus」到這樣的東西,並在適當的地方添加Tersosaurus的添加:

def functionPlus(button): 
    global turn 
    if 0 < turn < 10: 
     if turn % 2 == 0: 
      button.config(image=photo3,width="100",height="100") 
     else: 
      button.config(image=photo2,width="100",height="100") 
     turn += 1 
+0

哈,有趣!我甚至沒有閱讀過這個功能......但你絕對是對的!那些如果條件*在*'functionPlus'中就可以使用模數。 我的重點是下一個if語句(在單獨的代碼塊中),哪個*不工作* - 所以我解決了它。 – Tersosauros

+0

至於你關於[a = b == True](https://en.wikipedia.org/wiki/Assignment_%28computer_science%29#Assignment_versus_equality)模式的問題,最好在**分開的* *問題*(你自己的,所以你可以獲得一些聲望來通過該評論塊),但本質上這涉及[平等和賦值運算符的混淆](http://www.google.com/search ?Q =賦值+平等+混亂)。 – Tersosauros

+0

@Tersosauros是的,你回答了真正的問題 - 我只是重構了一下(因此,我的答案應該是一個評論,我猜)。無論如何,我忽略了最後一行(image = photo2 == True),所以我不明白你爲什麼首先提到了賦值/等號運算符的濫用。我的錯。 – jDo