Python Tkinter 比较 PhotoImage 对象

1 投票
1 回答
1041 浏览
提问于 2025-04-15 21:41

在一个简单的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

结果总是返回True——我可以把灯关掉,但永远无法再打开。经过一些研究,我意识到我可能应该使用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

指针

  1. self.buttons[x][y].image == self.off,你确定要用"=="而不是"="吗?

  2. 通过比较图片来判断你当前的状态并不是个好方法,建议使用一个变量,比如 self._isLightOn,当你改变状态时切换这个变量的值。然后根据这个变量来设置正确的图片、文本或者其他东西。

撰写回答