Python Tkinter, сравнивающий объекты PhotoImage - PullRequest
0 голосов
/ 16 апреля 2010

В простой игре LightsOut , когда я нажимаю на свет, мне нужно переключать изображение на кнопке. Я делаю это с Tkinter, поэтому я решил просто проверить и посмотреть, какое изображение в данный момент находится на кнопке («on.gif» или «off.gif») и установить его на другое, например так:

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, как этот?

1 Ответ

3 голосов
/ 16 апреля 2010

1001 * Pointers *

  1. self.buttons [x] [y] .image == self.off, вы уверены, что хотите «==» вместо «=»

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...