当前位置: 首页 > 知识库问答 >
问题:

如何使用Python中的Tkinter调整画布中图像的大小?

归鸿朗
2023-03-14

当试图创建一个应用程序,包括Tkinter在画布中的图像时,我在调整图像大小时遇到了一些问题。第一个是“从PIL导入图像,ImageTk”在PyCharm集成开发环境中不起作用,并且显示“模块不成立错误:没有名为‘PIL’的模块”。第二个对我来说是不可理解的,因为我是一个编码新手。它发生在我运行我在cmd中提到的python文件时。你能帮我理解这个问题以及我能做些什么吗?

代码:

from tkinter import*
import tkinter
from PIL import Image, ImageTk
    
image = Image.open("BG.png")
    image = image.resize((500,500), Image.ANTIALIAS)
    #self.pw.pic = ImageTk.PhotoImage(image)
    
myCanvas = Canvas(root, bg = "white", height=600, width = 600)
myCanvas.place(x=550,y=100)#pack()
myCanvas.create_image(0,0, image=image,anchor="nw")
myCanvas.place(x=550, y=100)

app=Window(root)
root.mainloop()

cmd中显示的错误:

  File "tk.py", line 50, in <module>
    myCanvas.create_image(0,0, image=image,anchor="nw")
  File "C:\Users\hahik_zvw4rds\anaconda3\lib\tkinter\__init__.py", line 2785, in create_image
    return self._create('image', args, kw)
  File "C:\Users\hahik_zvw4rds\anaconda3\lib\tkinter\__init__.py", line 2771, in _create
    return self.tk.getint(self.tk.call(
_tkinter.TclError: image "<PIL.Image.Image image mode=RGBA size=500x500 at 0x1A1BB564550>" doesn't exist

共有1个答案

通奕
2023-03-14

您的注释代码是正确的。您需要将图像转换为照片图像,以便tkinter能够使用它。

from tkinter import*
import tkinter
from PIL import Image, ImageTk
    
image = Image.open("BG.png")
image = image.resize((500,500), Image.ANTIALIAS)
pic = ImageTk.PhotoImage(image)
    
myCanvas = Canvas(root, bg = "white", height=600, width = 600)
myCanvas.place(x=550,y=100)#pack()
myCanvas.create_image(0,0, image=pic, anchor="nw")
myCanvas.place(x=550, y=100)
myCanvas.image=pic

app=Window(root)
root.mainloop()
 类似资料:
  • 问题内容: 我正在尝试使用javascript和canvas元素在客户端创建缩略图,但是当我缩小图像时,它看起来很糟糕。看起来好像是在Photoshop中缩小了尺寸,将重采样设置为“最近的邻居”而不是Bicubic。我知道有可能使它看起来正确,因为该站点也可以使用画布来完成它。我已经尝试使用与[[Source]]链接中所示相同的代码,但是看起来仍然很糟糕。是否缺少我需要的设置,需要设置的设置? 编

  • 问题内容: 我正在尝试使用画布调整某些图像的大小,但是我对如何使其平滑一无所知。在Photoshop,浏览器等上。它们使用一些算法(例如双三次,双线性),但我不知道这些算法是否内置在画布中。 第一个是正常尺寸调整后的图片标签,第二个是画布。请注意,画布如何不那么光滑。如何获得“顺滑度”? 问题答案: 您可以使用降级以获得更好的结果。调整图像大小时,大多数浏览器似乎使用线性插值而不是双三次插值。 (

  • 在javaFX中,调整画布大小没有这样的方法,唯一的解决方案是从画布扩展。 “从画布扩展”是使画布可调整大小的唯一解决方案吗?因为这个解决方案只有在我们不想使用FXML的情况下才起作用,如果我们在FXML中声明一个画布,我们如何使它可以调整大小? 这是我的代码:

  • 问题内容: 我正在尝试在python 2.7中创建一个tkinter项目,用户可以在其中调整窗口的大小,并且窗口中的所有内容都将随之缩放。这意味着画布,画布中的形状以及最重要的是PhotoImages将随窗口缩放。我的问题是我一生都无法正确调整图像大小。我知道并且为此目的而存在,但是首先 在50x50像素的图像中没有明显变化,对于zoom(2,2)也相同。重要的是要注意我知道PIL存在,但是出于本

  • 请看下面的P5代码 这个小应用程序的目的是在画布上拖放图像,根据“上传”图像的宽度和高度改变其大小。 使用:成功加载图像(至少显示图像)后,我将其宽度和高度分配给变量和。接着是画布大小的变化。。。这会导致一个错误,画布的大小与上传的图像相同(在上选中),但不显示任何内容。 使用:当禁用上的画布大小更改并单击画布时,调整大小会完美地显示图像。 应用程序需要在不点击的情况下工作,在删除图像后应该自动更

  • 我正在尝试用画布调整一些图像的大小,但我不知道如何平滑它们。在photoshop,浏览器等。有几个算法他们使用(例如双三次,双线性),但我不知道这些是不是内置到画布。 这是我的小提琴:http://jsfidle.net/ewupt/ 第一个是正常的调整大小的图像标签,第二个是画布。注意画布是如何不是平滑的。我怎样才能实现‘平滑’呢?