python - 椭圆对象上的 Tkinter 画布绑定正在阻塞类析构函数
问题描述
我有一个类和对象Dot
,它使用canvas.create_oval
. 将点与按钮按下绑定到函数后,我无法再调用对象析构函数。因此,该行canvas.tag_bind(self.oval, '<ButtonPress-1>', self.do_popup)
阻止调用析构函数,在注释掉该行后很容易重现。
我首先尝试解绑画布oval
,然后调用析构函数,没关系我尝试解绑+删除画布对象然后调用析构函数,也没关系。我对 Python 还是比较陌生,但我习惯于用不同的语言编程。
import tkinter as tk
class Dot():
def __init__(self, canvas):
print('test init')
self.canvas = canvas
self.oval = canvas.create_oval(100, 100, 200, 200, fill= 'blue')
#canvas.tag_bind(self.oval, '<ButtonPress-1>', self.do_popup)
canvas.tag_bind(self.oval, '<ButtonPress-1>', self.do_popup)
def __del__(self):
print('dot del')
def do_popup(self, event):
print("popup")
root=tk.Tk()
mainFr = tk.Frame(root)
mainFr.pack(fill=tk.BOTH, expand = tk.YES)
canvas = tk.Canvas(mainFr, width = 400, height = 400, bg = "white")
canvas.pack(fill=tk.BOTH, expand = tk.YES)
test = Dot(canvas)
del test
所以删除第 9 行:canvas.tag_bind(self.oval, '<ButtonPress-1>', self.do_popup)'
析构函数工作并被print('dot del')
打印。在第 9 行,析构函数没有被调用,print('dot del')
也没有被打印出来。有人可以帮助我做错了什么还是我滥用了析构函数?
解决方案
推荐阅读
- oauth-2.0 - Google 应用在生产中进行验证时被阻止
- python - 为包含外键的序列化程序类实现创建函数
- typescript - 确保类型约束按预期工作而没有回归
- sqlite - 无法在 SQLite 中选择日期
- python - 在 Cron 错误上运行 YouTube API 上传脚本
- php - Vue + Laravel sanctum CSRF 令牌不匹配 419 错误
- python - 如何从鼻子测试中获取错误消息
- java - 从地图中获取“空”值
- javascript - 我在 c# 中使用 rijndaelmanaged 加密图像文件,我想用加密 js 以角度解密它
- reactjs - Redux createSelector 似乎没有记忆结果