python - tkinter Canvas 图像不显示

标签 python python-3.x tkinter

我在一个函数中创建了一个简单的 Canvas ,我想在 Canvas 上显示一个图像。

def start(root):
    startframe = tkinter.Frame(root)
    canvas = tkinter.Canvas(startframe,width=1280,height=720)

    startframe.pack()
    canvas.pack()

    one = tkinter.PhotoImage('images\one.gif')
    canvas.create_image((0,0),image=one,anchor='nw')

当我运行代码时,我得到一个空白的 1280x720 窗口,没有图像。

我看过以下网站:http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm但我不明白如何将他们的示例应用到我的情况(如果这是我的问题,我不知道要创建对什么的引用或如何创建引用)。我还查看了一些堆栈溢出问题,但它们也没有帮助。

最佳答案

  1. 正确转义路径字符串中的反斜杠。 (或使用 r'raw string literal')。

  2. 防止 PhotoImage 对象被垃圾回收。

  3. 使用 file=... 选项指定文件名。


def start(root):
    startframe = tkinter.Frame(root)
    canvas = tkinter.Canvas(startframe,width=1280,height=720)

    startframe.pack()
    canvas.pack()

    # Escape / raw string literal
    one = tkinter.PhotoImage(file=r'images\one.gif')
    root.one = one  # to prevent the image garbage collected.
    canvas.create_image((0,0), image=one, anchor='nw')

更新

one = ...root.one = one 这两个语句可以合并为一个语句:

    root.one = one = tkinter.PhotoImage(r'images\one.gif')

关于python - tkinter Canvas 图像不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26479728/

相关文章:

python - 正则表达式中的可选匹配

python - 为什么 yield 生成的生成器比 xrange 生成的生成器快?

python - 使用 Python 使用 JSON 或 pickle 编码为变量

python - 在Python中绘制音频频谱图

python - 如何检查 DF 的列表和记录之间是否存在匹配,并根据匹配的存在返回匹配的值

python - 使用集合/列表作为值反转字典

python - 从 Tkinter 调用可执行文件时出错

Python-结构模块突然丢失

python - 在本地安装 tkinter 和 python

python - BeautifulSoup:获取具有特定属性的元素,与其值无关