7

我正在尝试将背景图像添加到 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

4 回答 4

10

PhotoImage不是Tk()实例 ( root) 的属性。它是一个类Tkinter

所以,你必须使用:

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

当心也是Label一个类Tkinter...

编辑:

不幸的是,Tkinter.PhotoImage仅适用于 gif 文件(和 PPM)。PhotoImage如果您需要读取 png 文件,您可以使用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()

在此处输入图像描述

于 2012-11-30T01:11:23.903 回答
0

只需更改为:

    image = Image.open("~~~path.png")
    backgroundImage=ImageTk.PhotoImage(image)

相信我,这会 100% 奏效

于 2015-03-30T04:21:27.333 回答
0

你用rootto AttributePhotoImage这是不可能的! root是您的窗口Tk()类,因此您不能为其归因,PhotoImage因为它没有它,因此您可以看到AttributeError tkinter.Tk()并且tkinter.PhotoImage是不同的类。和一样tkinter.Label

您的代码将无法使用root.PhotoImageand root.Label。尝试PhotoImageLabel直接。

创建一个Label

backgroundlabel = Label(parent, image=img)

如果使用任何类型的pngorjpg并且jpeg你不能用它来绘制它,PhotoImage你将需要PIL

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

现在你的代码工作了。

完整代码:

from Tkinter import *
from PIL import ImageTk,Image

... other stuffs

root            = Tk()
canvasWidth     = 600
canvasHeight    = 400
self.canvas     = Canvas(root,width=canvasWidth,height=canvasHeight)
path            = "D:\Documents\Background.png"  # Get the image full path
load            = Image.open(path)               # load that path
img             = ImageTk.PhotoImage(load)
backgroundLabel = Label(parent,image=img)
backgroundLabel .place(x=0,y=0,relWidth=1,relHeight=1)
self.canvas     .pack()
root            .mainloop()

希望这会有所帮助。

于 2021-05-06T21:17:39.410 回答
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()
于 2020-12-11T13:14:48.210 回答