图像未显示在tkinter画布上

时间:2019-06-14 23:03:19

标签: python canvas tkinter

  • 在能够复制问题后更新。

最初,我可以通过将一个键绑定到画布上来使其工作,我不知道为什么该方法起作用,但是后来又停止了作用,所以我进一步进行了调查。

设置了一些测试后,我设法制作了一个简短的代码来复制问题:

from tkinter import *


class SomeClass:
    def __init__(self, master):
        self.can = Canvas(master, bg="gray")
        self.can.pack()

        thing = PhotoImage(file=("./img/thing.PNG"))

        img = self.can.create_image(20, 20, image=thing)

        stuff = self.can.find_all()
        print(stuff)


app = Tk()

SomeClass(app)  # Does not work

something = SomeClass(app)  # Dos not work

# This part does work:
can = Canvas(app, bg="gray")
can.pack()
thing = PhotoImage(file=("./img/thing.PNG"))

img = can.create_image(20, 20, image=thing)

stuff = can.find_all()
print(stuff)

app.mainloop()

在所有情况下,img都作为一个项目显示在find_all()中,但前两个未在画布上显示。

还尝试将图像的创建作为带有绑定的方法来激活它,因为它认为在初始化期间出错。这没有任何改变。

那我在做什么错了?

1 个答案:

答案 0 :(得分:0)

当我终于找到问题所在时,回答我自己的问题。

我没有阅读有关PhotoImage的文档中的这一行:

“您必须在Python程序中保留对图像对象的引用,方法是将其存储在全局变量中,或者将其附加到另一个对象。”

因此,在这种情况下,使它起作用的方法是:

app = Tk()
thing = PhotoImage(file=("./img/thing.PNG")) # making it a global variable

class SomeClass:
    def __init__(self, master):
        self.can = Canvas(master, bg="gray")
        thing = PhotoImage(file=("./img/thing.PNG")
        self.can.img = thing   # This attaches the image to the canvas object

希望这可以帮助遇到此问题的其他人。