大马强 发表于 2021-9-15 09:48:02

【python】canvas组件插入图片


如何才能通过Button组件command调用的函数在canvas插入图片

from tkinter import *


def mq():
    photo = PhotoImage(file="./wc.png")
    w.create_image(20, 20, anchor=CENTER, image=photo)


root = Tk()
root.geometry("500x400")# 设置主窗口的位置和大小+
w = Canvas(root, height=300, width=400)
Button(root, text="233", command=mq).pack()# 但是通过button组件调用函数来插入就不行了
w.pack()

# 直接插入是可以的
# photo = PhotoImage(file="./wc.png")
# w.create_image(200, 150, anchor=CENTER, image=photo)

mainloop()

Twilight6 发表于 2021-9-16 12:07:57



因为图片文件对象定义在函数内,即局部作用域

此时你按下按钮后函数执行完毕,打开的图片对象会被 Python 垃圾回收,导致图片消失

参考代码:

from tkinter import *


def mq():
    global photo
    photo = PhotoImage(file="./wc.png")
    w.create_image(20, 20, anchor=CENTER, image=photo)

photo = None

root = Tk()
root.geometry("500x400")# 设置主窗口的位置和大小+
w = Canvas(root, height=300, width=400)
Button(root, text="233", command=mq).pack()# 但是通过button组件调用函数来插入就不行了
w.pack()
# 直接插入是可以的
# photo = PhotoImage(file="./wc.png")
# w.create_image(200, 150, anchor=CENTER, image=photo)

mainloop()

大马强 发表于 2021-9-16 21:06:49

Twilight6 发表于 2021-9-16 12:07
因为图片文件对象定义在函数内,即局部作用域

此时你按下按钮后函数执行完毕,打开的图片对象会被 P ...

谢谢大佬
页: [1]
查看完整版本: 【python】canvas组件插入图片