2014-06-10 3 views
4

이것은 Draw rectangle on mouse click [Python]을 기준으로합니다. 나는 첫 번째 해결책을 시도했지만 완벽하게 작동합니다. 누군가가 내게 말해 줄 수 있다면, 내가 그려진 직사각형을보고 싶다면 버튼을 놓으면 그려진 사각형을 볼 수 있기 때문에 마우스 버튼을 놓으면 고정 사각형이 고쳐집니다.Tkinter에서 마우스 이벤트를 사용하여 사각형 그리기

모든 종류의 도움을 주실 수 있습니다.

답변

4

참조 된 질문의 코드가 수정되었습니다. 이제 마우스가 캔버스에서 드래그 될 때 사각형을 보여줍니다. 캔버스에 레나 이미지가 표시됩니다.

import tkinter as tk # this is in python 3.4. For python 2.x import Tkinter 
from PIL import Image, ImageTk 



class ExampleApp(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 
     self.x = self.y = 0 
     self.canvas = tk.Canvas(self, width=512, height=512, cursor="cross") 
     self.canvas.pack(side="top", fill="both", expand=True) 
     self.canvas.bind("<ButtonPress-1>", self.on_button_press) 
     self.canvas.bind("<B1-Motion>", self.on_move_press) 
     self.canvas.bind("<ButtonRelease-1>", self.on_button_release) 

     self.rect = None 

     self.start_x = None 
     self.start_y = None 


     self._draw_image() 


    def _draw_image(self): 
     self.im = Image.open('./resource/lena.jpg') 
     self.tk_im = ImageTk.PhotoImage(self.im) 
     self.canvas.create_image(0,0,anchor="nw",image=self.tk_im) 



    def on_button_press(self, event): 
     # save mouse drag start position 
     self.start_x = event.x 
     self.start_y = event.y 

     # create rectangle if not yet exist 
     #if not self.rect: 
     self.rect = self.canvas.create_rectangle(self.x, self.y, 1, 1, fill="black") 

    def on_move_press(self, event): 
     curX, curY = (event.x, event.y) 

     # expand rectangle as you drag the mouse 
     self.canvas.coords(self.rect, self.start_x, self.start_y, curX, curY) 



    def on_button_release(self, event): 
     pass 


if __name__ == "__main__": 
    app = ExampleApp() 
    app.mainloop() 

enter image description here

는 검은 사각형은 화상 위에 그려진된다. 희망이 도움이됩니다.

+0

감사합니다. 백그라운드에서 캔버스 대신 이미지를 유지할 수 있습니까? – Anuradha

+0

@Anuradha 이미지를 유지한다는 것은 무엇을 의미합니까? 여러 개의 직사각형을 그리려면 'self.rect가 아닌 경우'를 제거하면 각 마우스 누름마다 직사각형이 작성됩니다. – Marcin

+0

아니요, 필요한 것은 PIL 이미지에 단일 직사각형을 그립니다. 나는이 클래스 종류의 코드에 익숙하지 않다. 이해하기 조금 어려움에 직면한다. – Anuradha