2012-05-12 11 views
0

をしようと、私はアプリケーションを閉じたいときとき、私は次のエラーを取得する:エラーTkinterのキャンバスからアイテムを削除する

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

そして、ここではRootJointから関連する部分である:

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

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

なぜこのエラーが表示されるのですか?どうすれば修正できますか?

答えて

1

問題は、

デルcanvesへの最後の参照が失われたとき

が呼び出されると、オブジェクトが削除されます。

何をしたい

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

は最初のキャンバスとすべての要素が破壊され、破壊し、その後

+0

を削除されることは '「」'キャンバス全体が破壊されたときに放出された場合、もしくはです現在のオブジェクトは破壊されますか?実行中に画面からジョイントを削除する必要があるので、これが重要です。 –

+0

キャンバスへの最後の参照はどのように失われていますか?ルートジョイントはキャンバスへの独自の参照を持ちます。 –

+0

あなたはいつもそれらのアイテムを削除できますが、__del__ではそれは遅すぎます:最後のチャンスはonDestroyです – User

関連する問題