gpt4 book ai didi

python - Tkinter Canvas 不显示

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:07 30 4
gpt4 key购买 nike

我正在尝试学习一些 Python 和 Tkinter。下面的示例代码旨在在屏幕上放置两个窗口、几个按钮和一个带有图像和一些线条的 Canvas 。

窗口和按钮看起来很好,但是我没有看到 Canvas 图像或 Canvas 线条。如果能帮我弄清楚我的 Canvas 显示需要什么,我将不胜感激。

from Tkinter import *
import Image, ImageTk

class App:

def __init__(self, master):

def scrollWheelClicked(event):
print "Wheel wheeled"

frame = Frame(master)
frame.pack()
self.button = Button(frame, text = "QUIT", fg="red", command=frame.quit)
self.button.pack(side=LEFT)

self.hi_there = Button(frame, text="Hello", command=self.say_hi)
self.hi_there.pack(side=LEFT)

top = Toplevel()
canvas = Canvas(master=top, width=600, height=600)

image = Image.open("c:\lena.jpg")
photo = ImageTk.PhotoImage(image)
item = canvas.create_image(0, 0, image=photo)

canvas.create_line(0, 0, 200, 100)
canvas.create_line(0, 100, 200, 0, fill="red", dash=(4, 4))
canvas.create_rectangle(50, 25, 150, 75, fill="blue")

canvas.pack

testBtn = Button(top, text = "test button")
testBtn.pack()

def say_hi(self):
print "hi there everyone!"

root = Tk()
app = App(root)
root.mainloop()

最佳答案

我解决了这个问题:

self.photo = ImageTk.PhotoImage(image)
self.item = canvas.create_image(0, 0, image=self.photo)

对 ImageTk 实例的引用必须存储在某个地方,否则当您的 App.__init__() 方法返回时,它将被垃圾收集, Canvas 将无法显示它。 (Tkinter 不保留对图像的引用。)

保留对它的引用的一种方法是将其存储在“self.photo”或名为“photo”的变量中,或者像大多数程序员对常量变量(不会改变的变量,如“TEN” = 10'), 'PHOTO = PhotoImage(...)' 为什么...我不知道。导入模块“gc”(Python 3 的垃圾收集模块,内置)并运行 gc.disable() 不起作用。 (如果你想尝试:https://docs.python.org/3/library/gc.html)

关于python - Tkinter Canvas 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2223985/

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