【问题标题】:Python tkinter not showing gif image and appears as PhotoImage.1Python tkinter 不显示 gif 图像并显示为 PhotoImage.1
【发布时间】:2017-07-27 03:56:58
【问题描述】:

我正在为我的 python 类介绍做一个井字游戏项目,我想制作一个由 9 个按钮组成的网格,所以当你点击它们时,会出现一个 x 或一个圆圈的图像。我的代码在没有图像的情况下可以正常运行,但在使用图像时却不行。

Layout for tic tac toe

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')

【问题讨论】:

  • 哦,哎呀,我使用了错误的代码。我之前正在玩代码。我将 text= 小部件更改为 image=,现在当我点击按钮时,它变成了一个非常小的框
  • 如果旧代码不相关,请将其从问题中删除。

标签: tkinter python-3.6


【解决方案1】:

好吧,您将图像传递给按钮的text= 选项。正如您可能从名称中猜到的那样,此选项仅指定按钮的文本。请改用image= 选项。

代码仍然无法正常工作,因为您将加载的图像的引用仅存储在局部变量中 - 一旦函数返回,图像就会消失。 (Tkinter 小部件和它显示的任何图像之间的连接完全超出了 Python 的世界观,因此不足以防止图像被垃圾收集。)您需要维护对每个图像的引用,只要小部件会 - 通常是小部件的属性或全局变量。由于您在这里只需要处理两个图像,因此全局变量比每次移动时都从磁盘重新加载图像更有意义。

【讨论】:

  • 哦,谢谢!我只是回顾了我的代码并意识到我不小心将 image= 小部件更改为 text= 小部件。但即使这是问题之一,即使有参考,我的按钮仍然不会变成图像
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多