删除类的实例

时间:2014-10-17 12:31:31

标签: python class instance code-organization

我已经在这里问了一个类似的问题,我收到了很有帮助的答复。 但是从那以后我修改了我的代码,现在它更加优化我想,它应该更灵活,但同样的问题仍然存在。我无法删除该类的实例。

我尝试做的是创建一个圆圈(左键单击),然后我希望程序删除圆圈(右键单击)。

My code:

from tkinter import *

class Application:
    def __init__(self):
        self.fen = Tk()
        self.fen.title('Rom-rom-roooooom')
        self.butt1 = Button(self.fen, text = ' Quit ', command = self.fen.quit)
        self.can1 = Canvas(self.fen, width = 300, height = 300, bg = 'ivory')
        self.can1.grid(row = 1)
        self.butt1.grid(row = 2)
        self.fen.bind("<Button-1>", self.create_obj)
        self.fen.bind("<Button-3>", self.delete_obj)
        self.fen.mainloop()
    def create_obj(self, event):
        self.d = Oval()
        self.can1.create_oval(self.d.x1, self.d.y1, self.d.x2, self.d.y2, fill='red', width = 2)
    def delete_obj(self, event):
        self.can1.delete(self.d)


class Oval:

    def __init__(self):
        self.x1 = 50
        self.y1 = 50
        self.x2 = 70
        self.y2 = 70



appp = Application()

所以,再一次,问题是我在这里无法删除对象:

def delete_obj(self, event):
        self.can1.delete(self.d)

还有一个问题。鉴于我只是一个乞丐,我不知道我是否选择了正确的方法,就课堂组织而言。它看起来像是一个组织良好的代码,还是我现在应该改变什么呢?

1 个答案:

答案 0 :(得分:1)

这两行:

self.d = Oval()
self.can1.create_oval(self.d.x1, self.d.y1, self.d.x2, self.d.y2, fill='red', width = 2)

创建一个新的Oval对象,将该对象指定给名称self.d,然后在self.can1上创建一个完全不相关的椭圆形(除了分配给Oval的{​​{1}}对象中的相同维度属性)。相反,我认为你想要:

self.d

这保留了o = Oval() self.d = self.can1.create_oval(o.x1, o.y1, o.x2, o.y2, fill='red', width = 2) 上对象的引用,因此您可以Canvas它。请注意,delete或多或少完全没有意义,因为它只是提供维度。