gpt4 book ai didi

python - Tkinter:从按钮处理程序访问 Canvas

转载 作者:行者123 更新时间:2023-12-01 05:21:05 24 4
gpt4 key购买 nike

如何通过按钮调用的函数更新 Canvas ?这是我的代码:

from Tkinter import *
import ImageTk

tk = Tk()
canvas = Canvas(tk, bg="white", width=300, height=200)
canvas.grid()

def displayLabel():
photoimage = ImageTk.PhotoImage(file="Logo.png")
canvas.create_image(0,0, image=photoimage, anchor = NW)

b3 = Button(tk, text="Display Label", width=30, command= displayLabel())
b3.grid(row=1)

tk.mainloop()

按“显示标签”按钮不会执行任何操作。我尝试在方法中指定 Canvas 全局,或者将 Canvas 作为参数传递(使用 command = lambda (displayLabel(canvas)) ),但都没有效果。我做错了什么?

更新:我现在意识到我的问题是 duplicate of this one ,但是 @shalitmaan 的回答以其他人没有的方式帮助了我。

最佳答案

当您将 PhotoImage 或其他 Image 对象添加到 Tkinter 小部件时,您必须保留自己对图像对象的引用。如果不这样做,图像将不会总是显示。这基本上就是我想说的:

def displayLabel():
photoimage = ImageTk.PhotoImage(file="lena.png")
canvas.create_image(0,0, image=photoimage, anchor = NW)
canvas.image=photoimage #keep the reference!

我是从here学到的.

此外您需要删除括号()

b3 = Button(tk, text="Display Label", width=30, command= displayLabel) #no parenthesis

否则,即使按下按钮,也会直接调用。直到现在您可能还没有注意到它,因为 Tk 只是将图像设为空白,正如您现在可以从链接中了解到的那样。

另外如果您想向 displayLabel 发送一些参数,您需要使用 lambda。例如:

b3 = Button(tk, text="Display Label", width=30, command= lambda:displayLabel(args))

在您提出的问题中,您缺少冒号:

关于python - Tkinter:从按钮处理程序访问 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22369075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com