我正在尝试在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
答案 0 :(得分:8)
PhotoImage
不是Tk()
个实例(root
)的属性。这是一个来自Tkinter
的课程。
所以,你必须使用:
backgroundImage = PhotoImage("D:\Documents\Background.gif")
请注意Label
是来自Tkinter
...
编辑:
不幸的是,Tkinter.PhotoImage
仅适用于gif文件(和PPM)。
如果您需要阅读png文件,可以使用PhotoImage
中ImageTk
模块中的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()
答案 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.Label
和 root.PhotoImage
。
尝试直接 root.Label
和 PhotoImage
。
创建一个Label
:
Label
如果使用任何类型的 backgroundlabel = Label(parent, image=img)
或 png
和 jpg
你不能只用 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
希望这会有所帮助。