나는 이미 비슷한 질문을 던졌고 꽤 도움이되었습니다. 하지만 그때부터는 코드를 수정 했으므로 이제는 더 최적화 된 것으로 보입니다. 더 유연 할 것으로 생각되지만 동일한 문제가 계속 발생합니다. 클래스의 인스턴스를 삭제할 수 없습니다.클래스 인스턴스 삭제
내가하려는 것은 원 클릭 (왼쪽 클릭)을 작성한 다음 프로그램이 원을 삭제할 것으로 기대합니다 (오른쪽 클릭).
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)
하나 개 더 질문입니다. 내가 초보자라는 사실을 감안할 때, 계급 조직에 관한 한 내가 올바른 접근법을 선택했는지 나는 알지 못한다. 잘 구성된 코드처럼 보이 나 이미이 단계에서 아무 것도 바꿔야합니까?
알 수 있습니다. OVAL 클래스에 원을 만드는 방법을 바꾸어야합니까? 그런 다음 Application 클래스에서 참조하십시오. –
나는 당신이 따르는 논리를 이해하지 못합니다. 당신 자신의 클래스'타원형'의 인스턴스를 만들고, 또 다른 tkinter 객체를 생성합니다. 당신은 결코'can1' 위에'self.d'를 놓지 않았습니다. '타원형'은 무엇을 필요로합니까? – luk32