【问题标题】:invisible image in python tk canvaspython tk画布中的不可见图像
【发布时间】:2017-05-30 10:33:58
【问题描述】:

我在 python 中使用PhotoImage()打开了一个图像并将它放在画布上。但是,画布上什么也没有出现。

为什么它没有显示在画布中或者我需要做其他事情吗?

窗口和画布设置:

from tkinter import *

w = 960; h = 540

window = Tk()
window.title("Joe's Game")
window.geometry(str(w)+"x"+str(h))

canvas = Canvas(window, width=w, height=h)
canvas.configure(background='#2B2F37')
canvas.pack()
window.update()

图像设置:

block_mid = PhotoImage("images/block_mid.jpg")
block_cr = PhotoImage("images/block_corner_right.jpg")
block_cl = PhotoImage("images/block_corner_left.jpg")

block_1 = canvas.create_image(60,60,image = block_mid)

canvas.pack()
canvas.update()
window.update()

我检查了文件路径和名称,但找不到原因。它不会产生我要调查的错误。另外,我在代码之后尝试了canvas.pack()、canvas.update() 和window.update(),但它们似乎没有做任何事情。

【问题讨论】:

  • PhotoImage("images/block_mid.jpg") 目录上的图像,但您的默认路径是/bin/,尝试打印一些图像内容(作为文本)。使用 sys.path.append(os.getcwd()) 自动解析 baseDıR

标签: python python-3.x canvas tkinter


【解决方案1】:

尝试以这种方式打开图像:

block_mid = PhotoImage(Image.open("images/block_mid.jpg"))
# all other images opened this way as well

【讨论】:

  • 这会返回错误:TypeError: str returned non-string (type JpegImageFile)
  • @JoeAllen,它到底在抱怨哪一行?你检查路径是否正确?我也没有在您的代码中看到 window.mainloop()。
  • 我在代码末尾有window.mainloop(),但无论是否存在,它都会给出相同的错误。完整的错误是: Traceback(最近一次调用最后一次):文件“F:\stuff\Python\game\game.py”,第 52 行,在 block_1 = canvas.create_image(60,60, image = block_mid)文件“D:\apps\Python\lib\tkinter_init_.py”,第 2483 行,在 create_image return self._create('image', args, kw) 文件“D:\apps\Python \lib\tkinter_init_.py",第 2474 行,在 _create *(args + self._options(cnf, kw)))) 类型错误:str 返回非字符串(输入 JpegImageFile)
【解决方案2】:

它很可能被垃圾收集器捕获。

您可以通过将图像绑定到 python 引用的永久对象来防止这种情况,例如window 或 self,如果你正在上课。

即,在变量前添加window. 以处理图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多