2010-04-16 3 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 [х] [у] .image == self.off, вы уверены, что хотите "==" вместо "="

  2. Сравнение изображений чтобы получить то, в каком состоянии вы находитесь, не является хорошим способом, вместо этого используйте переменную eg self._isLightOn и переключите ее, когда вы меняете состояния, на основе этой переменной задают правильные изображения или текст или что-то еще.

+0

Нет, следует использовать =. Итак, это было просто, должно быть, было больше кофе сегодня утром. –

+0

Также, что не так, сравнивая изображения, чтобы определить состояние? –

+0

@ Kyle Schmidt, сравнение изображений неверно, потому что изображение не состояние, у вас может быть 10 изображений в анимации для одного и того же состояния или одного изображения в двух состояниях с другим текстом, но, что более важно, лучше сравнить простые объекты, сравнение которых вы можете предсказывать, иначе вы можете иметь два изображения, которые выглядят одинаково, но не идентичны –