Tkinter画布不显示

我正在尝试学习一些Python和Tkinter。下面的示例代码旨在在屏幕上放置两个窗口,几个按钮和一个带有图像的画布,并在其上绘制一些线条。Tkinter画布不显示

窗口和按钮显示得很好,但我没有看到画布图像或画布线。我很感谢一些帮助,弄清楚什么是需要让我的画布显示。

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()

回答:

在画布对象上调用包时需要括号。否则,你只是指向函数对象,而不是调用它。

例如:

canvas.pack() 

又如:

>>>def hello(): 

... print "hello world"

... return

>>>hello返回功能参考(在0X功能你好....)

>>>hello()实际调用Hello功能

回答:

我解决了这个问题:

self.photo = ImageTk.PhotoImage(image) 

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

到ImageTk实例的引用必须存储在某个地方,或者当你App.__init__()方法返回,这将是垃圾收集,并在画布将无法显示。 (Tkinter不保留对图像的引用。)

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

以上是 Tkinter画布不显示 的全部内容, 来源链接: utcz.com/qa/262650.html

回到顶部