按钮无法在TKinter Canvas Widget中打开图像



我创建的代码似乎有一些问题。我正在尝试使用两个按钮在我的Tkinter画布上创建图像。

由于某些原因,我的按钮在单击时不会返回任何错误,但它们也不会在画布中显示图像。

有人能帮我找出代码中的错误是什么吗?提前感谢!

请注意,当创建两个图像的代码在定义的函数之外运行时,它确实成功地在画布上创建了图像,问题是按钮没有正确执行命令

import tkinter
from tkinter import ttk
from tkinter import *
import PIL.Image
import PIL.ImageTk
root = Tk()
canvas = Canvas(root)
canvas.pack()
canvas.config(width=300, height= 500,background = 'white')

def previewpng(): 
photo = PhotoImage( file = 'C:/Users/Admin/Documents/logo.png')
png_preview = canvas.create_image(150,150, image = photo)
def preview():
Imagetif = PIL.Image.open( "C:/Users/Admin/Documents/sampledata.tif")
Im = PIL.ImageTk.PhotoImage(Imagetif)
preview = canvas.create_image( relx = 0, rely= 0, image = Im )

#creating buttons
button= ttk.Button (root, text= 'View preview of PNG')
button.pack()
button.config( command = previewpng )
button2= ttk.Button (root, text= 'View Preview of Tif file')
button2.pack()
button2.config( command = preview )

root.mainloop()

您在函数previewpng()中创建图像,当函数退出时,包含图像引用的变量被垃圾收集,ant tkinter再也找不到它了。

在每个功能中添加一行以保存图像参考:

def previewpng(): 
photo = PhotoImage( file = 'pilner.png')
png_preview = canvas.create_image(150,150, image = photo)
canvas.image = photo  # Save image reference
def preview():
Imagetif = PIL.Image.open( "beear.tif")
Im = PIL.ImageTk.PhotoImage(Imagetif)
preview = canvas.create_image(50, 50, image = Im )
canvas.image2 = Im    # Save image reference

最新更新