참조 된 질문의 코드가 수정되었습니다. 이제 마우스가 캔버스에서 드래그 될 때 사각형을 보여줍니다. 캔버스에 레나 이미지가 표시됩니다.
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()
는 검은 사각형은 화상 위에 그려진된다. 희망이 도움이됩니다.
감사합니다. 백그라운드에서 캔버스 대신 이미지를 유지할 수 있습니까? – Anuradha
@Anuradha 이미지를 유지한다는 것은 무엇을 의미합니까? 여러 개의 직사각형을 그리려면 'self.rect가 아닌 경우'를 제거하면 각 마우스 누름마다 직사각형이 작성됩니다. – Marcin
아니요, 필요한 것은 PIL 이미지에 단일 직사각형을 그립니다. 나는이 클래스 종류의 코드에 익숙하지 않다. 이해하기 조금 어려움에 직면한다. – Anuradha