2014-10-14 4 views
0

저는 파이썬에서 클래스 개념을 이해하려고 노력 중이며 약간의 운동을하기로 결심했습니다.객체의 인스턴스를 삭제하십시오.

내가하려는 것은 원 클릭 (왼쪽 클릭)을 작성한 다음 프로그램이 원을 삭제할 것으로 기대합니다 (오른쪽 클릭).

음, 여기 내 문제의 두 번째 부분이 있습니다.

내 코드 : 여기

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

, 프로그램은 'd는'클래스 타원형의 인스턴스 인 것을 이해하지만, 그것은 마우스 오른쪽 버튼으로 클릭에 개체를 삭제하지 않습니다

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

이 파이썬에서 클래스에 대해 정말 아니라, Tkinter를 특정 방법 (create_oval)의 행동에 대해 : 원을 제거하려면 Canvas.delete 방법을 사용합니다. 일반적으로 TK는 파이썬에서 클래스의 좋은 예라고 추천하지는 않습니다. –

+1

+1 @ DanielRoseman 님의 의견 : TK를 좋은 예로서 추천하지는 않겠습니다. 이 경우 – rmunn

+0

GUI 라이브러리로 추천 하시겠습니까? –

답변

2

tkinter 문서에서 create_oval은 정수 인 객체 ID를 반환합니다.

from tkinter import * 

import time 

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

    def create_obj(self, event): 
     d = self.can1.create_oval(150,150, 170, 170, fill='red', width = 2) 
     time.sleep(3) 
     self.can1.delete(d) 

appp = Application() 
+0

정말 고마워요! 이제 작동합니다! –

+0

위에서 작성한 코드를 최적화하려고 시도했지만 새로운 문제가 발생했습니다. 이걸 좀 봐 주시겠습니까? 내 첫 메시지의 텍스트를 편집했습니다. –

+0

@SergeTelnov 새로운 질문으로 물어보십시오. 더 많은 사람들이 그것을 보게 될 것입니다. – simonzack

관련 문제