在python中添加背景图像

时间:2012-11-30 00:03:42

标签: python canvas background python-imaging-library

我正在尝试在Python中向画布添加背景图像。到目前为止代码看起来像这样:

from Tkinter import *
from PIL import ImageTk,Image

... other stuffs

root=Tk()
canvasWidth=600
canvasHeight=400
self.canvas=Canvas(root,width=canvasWidth,height=canvasHeight)
backgroundImage=root.PhotoImage("D:\Documents\Background.png")
backgroundLabel=root.Label(parent,image=backgroundImage)
backgroundLabel.place(x=0,y=0,relWidth=1,relHeight=1)
self.canvas.pack()
root.mainloop()

它返回一个AttributeError:PhotoImage

4 个答案:

答案 0 :(得分:8)

PhotoImage不是Tk()个实例(root)的属性。这是一个来自Tkinter的课程。

所以,你必须使用:

backgroundImage = PhotoImage("D:\Documents\Background.gif")

请注意Label是来自Tkinter ...

的课程

编辑:

不幸的是,Tkinter.PhotoImage仅适用于gif文件(和PPM)。 如果您需要阅读png文件,可以使用PhotoImageImageTk模块中的PIL(是,同名)类。

这样,这会将你的png图像放在画布上:

from Tkinter import *
from PIL import ImageTk

canvas = Canvas(width = 200, height = 200, bg = 'blue')
canvas.pack(expand = YES, fill = BOTH)

image = ImageTk.PhotoImage(file = "C:/Python27/programas/zimages/gato.png")
canvas.create_image(10, 10, image = image, anchor = NW)

mainloop()

enter image description here

答案 1 :(得分:0)

只需更改为:

    image = Image.open("D://Engagement2/backgrounds/500x400.png")
    backgroundImage=ImageTk.PhotoImage(image)

相信我,这将100%工作

答案 2 :(得分:0)

from Tkinter import *
from PIL import ImageTk

canvas = Canvas(width = 200, height = 200, bg = 'blue')
canvas.pack(expand = YES, fill = BOTH)

image = ImageTk.PhotoImage(file = "C:/Python27/programas/zimages/gato.png")
canvas.create_image(10, 10, image = image, anchor = NW)

mainloop()

答案 3 :(得分:0)

您正在使用 root 属性 PhotoImage 这不可能! root 是您的窗口 Tk() 类,因此您不能将其归因于 PhotoImage,因为它没有它,因此您会看到 AttributeError tkinter.Tk() 和 {{1} } 是一个不同的类。和 tkinter.PhotoImage 相同。

您的代码不适用于 tkinter.Labelroot.PhotoImage。 尝试直接 root.LabelPhotoImage

创建一个Label

Label

如果使用任何类型的 backgroundlabel = Label(parent, image=img) pngjpg 你不能只用 jpeg 绘制它你需要 PIL

PhotoImage

当你拥有它时使用它:

pip3 install PIL

现在获取您的完整路径图像,例如:

from PIL import Image, ImageTk # import image so you can append the path and imagetk so you can convert it as PhotoImage

现在使用它:

C:/.../img.png

现在你的代码可以工作了。

完整代码:

path = "C:/.../img.png"         # Get the image full path
load = Image.open(path)         # load that path
img  = ImageTk.PhotoImage(load) # convert the load to PhotoImage

希望这会有所帮助。