0

アプリケーションを閉じたいときに、次のエラーが発生します。

Exception _tkinter.TclError: 'invalid command name ".47045488"' in <bound method
RootJoint.__del__ of <skeleton.RootJoint object at 0x0000000002CDDBA8>> ignored

そして、ここに からの関連部分がありますRootJoint:

def __init__(self, canvas):
    self.parent = None
    self.angle = 0.0
    self.distance = 0.0

    topleft = 0 - Joint.SQUARE_HALF_SIDE, 0 + Joint.SQUARE_HALF_SIDE
    bottomright = 0 + Joint.SQUARE_HALF_SIDE, 0 - Joint.SQUARE_HALF_SIDE

    self._joint = canvas.create_rectangle(*(topleft + bottomright))
    canvas.itemconfig(self._joint, fill=RootJoint.COLOR_NORMAL)

    self.canvas = canvas

def __del__(self):
    self.canvas.delete(self._joint)

そして、これがキャンバスとルート ジョイントが作成される場所です。

def main():
    root = tk.Tk()
    root.geometry('640x480')

    canvas = tk.Canvas(root)
    canvas.pack(fill=tk.BOTH, expand=True)

    rootjoint = skeleton.RootJoint(canvas)

    root.mainloop()

このエラーが表示される理由と修正方法を教えてください。

4

1 に答える 1

1

問題はそれです

デル

canves への最後の参照が失われ、オブジェクトが削除されたときに呼び出されます。

あなたが欲しいのは

def __init__(...):
    ...
    self.bind("<Destroy>", self.onDestroy)
def onDestroy(self, event):
    self.canvas.delete(self._joint)

最初にキャンバスとすべての要素が破棄され、破棄されてから削除されます

于 2012-05-12T20:04:00.393 に答える