我一定错过了一些东西,因为我的代码不起作用:
我在 类 compaClass 中有这两个函数:
def drawImgs(self):
canvas1.delete("all")
canvas1.create_image(0, 0, anchor=NW, image=newImg1)
def loadImg(self):
global newImg1
...
newImg1 = ImageTk.PhotoImage(resized_image1)
这件事很好,但我在想:为什么要在类外使用变量?为什么不使用 compaClass.img 变量呢?它应该始终可用,而无需将其声明为全局的。所以我用 self.img1 替换了 newImg 现在它不会绘制任何内容,不会返回任何错误 - 它看起来很像没有“global newImg1”的原始版本。
对我错过的它不起作用有什么建议吗?
def drawImgs(self):
canvas1.delete("all")
canvas1.create_image(0, 0, anchor=NW, image=self.img1)
def loadImg(self):
global newImg1
...
self.img1 = ImageTk.PhotoImage(resized_image1)
如果不存在对图像对象的引用,则使用
ImageTk.PhotoImage
创建并分配给函数或方法本地变量的图像将受到垃圾回收。
compaClass
在需要时存储在变量中。self.img1
并在loadImg()
中更新。
修改后的代码:
import tkinter as tk
from tkinter import Canvas
from PIL import Image, ImageTk
class CompaClass:
def __init__(self, root):
self.root = root
self.canvas = Canvas(root, width=400, height=400)
self.canvas.pack()
self.img1 = None
def draw_imgs(self):
self.canvas.delete("all")
if self.img1:
self.canvas.create_image(0, 0, anchor=tk.NW, image=self.img1)
else:
print("No image has been loaded")
def load_img(self, image_path):
image = Image.open(image_path)
resized_image = image.resize((400, 400))
self.img1 = ImageTk.PhotoImage(resized_image)
self.draw_imgs()
root = tk.Tk()
app = CompaClass(root)
app.load_img('your_path_to_the_image.jpg')
root.mainloop()