我正在为我的python类简介做一个tic tac toe项目,我想制作一个包含9个按钮的网格,所以当你点击它们时会出现一个x或一个圆圈的图像。我的代码在没有图像的情况下正常运行,但它不适用于图像。
What happens after I click on one of the buttons
这是代码(对不起,我从未发布过堆栈,所以我不知道如何格式化) 这是新的
def sink(self, i):
if self.turn:
me = PhotoImage(file="x.gif")
self.turn = False
self.bState[i] = -1
self.bList[i].config(relief=SUNKEN, text=me, state='disabled')
else:
me = PhotoImage(file="o.gif")
self.turn = True
self.bState[i] = 1
self.bList[i].config(relief=SUNKEN, text=me, state='disabled')
答案 0 :(得分:0)
好吧,您将图像传递给按钮的text=
选项。正如您可能从名称中猜到的那样,此选项仅指定按钮的文本。请改用image=
选项。
代码仍然无法正常工作,因为您将对只加载在局部变量中的图像的引用存储起来 - 一旦函数返回,图像就会消失。 (Tkinter小部件与其显示的任何图像之间的连接完全在Python的世界观之外,因此不足以防止图像被垃圾收集。)您需要维护对每个图像的引用,只要小部件确实 - 通常是小部件的属性或全局变量。由于这里只处理了两个图像,因此全局变量比每次移动时从磁盘重新加载图像更有意义。