【发布时间】:2016-02-01 03:15:38
【问题描述】:
当我使用 create_text 将文本添加到画布时,我收到错误 alloc: invalid block: 047129A8: c0 4
这是一个示例程序。如果 create_text 被删除,单击矩形会关闭程序,但在添加文本后程序会关闭,但会出现错误消息并弹出一个窗口,提示 python 已停止工作。
如果我用 quit() 替换 destroy(),它工作正常。 (Python 3.5)
import tkinter as TK
class Button():
def __init__(self):
self.master = TK.Tk()
canvas_width = 200
canvas_height =200
canvas = TK.Canvas(self.master, width=canvas_width, height=canvas_height)
button = canvas.create_rectangle([10,10,110,30],fill='lightgrey')
canvas.tag_bind(button, "<ButtonPress-1>", self.test) # lambda x: self.action(x,DOWN))
canvas.pack()
canvas_id = canvas.create_text(10, 50, anchor="nw")
canvas.itemconfig(canvas_id, text="this is the text")
TK.mainloop()
def test(self, e):
print ('Clicked')
#self.master.quit()
self.master.destroy()
if __name__ == '__main__':
b = Button()
【问题讨论】:
-
那你为什么不使用
.quit()?它使 python 崩溃,因为处理运行self.test的线程的tkinter实例在中途被破坏,而使用.quit()使系统在关闭时有更多机会进行清理。 -
我不明白为什么添加 create_text 会导致这种情况。没有 create_text (我已经在一个更大的应用程序上测试过)破坏工作正常。是的,我当然可以使用 quit,但是当出现错误时,我想知道原因。
-
哦误解了什么奇怪的行为,刚刚测试它删除
create_text,它在我的mac上做了同样的事情。在那种情况下忘记我之前的评论,我也想知道为什么会发生这种情况!