2010-04-16 3 views
0

간단한 LightsOut 게임에서, 빛을 클릭하면 버튼의 이미지를 토글해야합니다. 저는 Tkinter에서이 작업을하고 있습니다. 그래서 저는 어떤 이미지가 현재 버튼에 있는지 (on.gif 또는 off.gif) 확인하고 다른 이미지로 설정합니다.PhotoImage 오브젝트를 비교하는 파이썬 Tkinter

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

아니요, =을 사용해야합니다. 그래서, 이것은 오늘 아침 문제가 더 많은 커피를 마셨을 것입니다. –

+0

또한 이미지를 비교하여 상태를 확인하는 것이 잘못된 이유는 무엇입니까? –

+0

@Kyle Schmidt, 이미지가 상태가 아니기 때문에 이미지를 비교하는 것이 잘못되었습니다. 동일한 상태의 애니메이션에 10 개의 이미지가 있거나 텍스트가 다른 두 상태의 동일한 이미지가있을 수 있지만 더 중요한 것은 비교할 수있는 간단한 개체를 비교하는 것이 좋습니다. 예측합니다. 그렇지 않으면 동일하게 보이지만 동일하지 않은 두 개의 이미지를 가질 수 있습니다. –

관련 문제