2010-04-16 98 views
0

在一個簡單的LightsOut遊戲中,當我點擊一個燈光時,我需要在一個按鈕上切換圖像。我正在用Tkinter做這件事,所以我想我只是檢查並查看按鈕上的圖像('on.gif'或'off.gif'),並將其設置爲另一個,如下所示:Python Tkinter比較PhotoImage對象

def click(self,x,y): 
    if self.buttons[x][y].image == self.on: 
     self.buttons[x][y].config(image=self.off) 
     self.buttons[x][y].image == self.off 
    else: 
     self.buttons[x][y].config(image=self.on) 
     self.buttons[x][y].image == self.on 

這最終總是正確的 - 我可以關燈,但不要再打開它。做了一些研究,意識到我應該使用cmp:

def click(self,x,y): 
    if cmp(self.buttons[x][y].image,self.on) == 0: 
     self.buttons[x][y].config(image=self.off) 
     self.buttons[x][y].image == self.off 
    else: 
     self.buttons[x][y].config(image=self.on) 
     self.buttons[x][y].image == self.on 

但是,這給了我完全相同的結果。 self.on和self.off都是PhotoImage對象。除了保存一組單獨的列表,它們跟蹤每個位置的光線類型並每次點擊重繪它們,有沒有辦法直接比較兩個PhotoImage對象?

回答

3

指針

  1. self.buttons [X] [Y] ==圖像配self.off,你確定你想要的 「==」 代替 「=」

  2. 比較圖像得到你所處的狀態不是一個好方法,而是使用一個變量,比如self._isLightOn,當你改變狀態時切換它,根據這個變量設置正確的圖像,或者文本或者其他東西。

+0

不,應該使用=。所以,這是一個簡單的今天早上應該有更多的咖啡問題。 – 2010-04-16 13:17:13

+0

另外,比較圖像以確定狀態有什麼問題? – 2010-04-16 14:34:38

+0

@凱爾施密特,比較圖像是錯誤的,因爲圖像不是狀態,你可能有10個圖像用於相同狀態的動畫,或者兩個狀態下具有不同文本的圖像相同,但更重要的是比較簡單對象預測,否則你可以有兩個看起來相同但不相同的圖像 – 2010-04-16 18:19:15