2
캔버스 내에서 이미지를 가져 와서 클릭 할 때마다 페인트 기능을 클릭하여 점을 그립니다.클릭 이벤트에서 캔버스에 점을 그리는 방법 Tkinter Python
을 제외한 모든 항목이 정상적으로 작동하고 있습니다. 페인트 기능이 제대로 작동하지 않습니다.
바람직한 출력
클릭 이벤트는 점을 그립니다. 클릭 이벤트
실제 출력
에 드래그 할 필요가 나는 캔버스에 그림을보기 위해 마우스 클릭 이벤트에 드래그 할 필요가 없습니다.
페인트 기능에 약간의 문제가있을 수 있습니다. 그러나 나는 그것이 정확히 무엇인지 알 수 없었다.
from tkinter import *
from PIL import Image, ImageTk
class Main(object):
def __init__(self):
self.canvas = None
def main(self):
master = Tk()
# Right side of the screen/image holder
right_frame = Frame(master, width=500, height=500, cursor="dot")
right_frame.pack(side=LEFT)
# Retrieve image
image = Image.open("./image/demo.JPG")
image = image.resize((800, 700), Image.ANTIALIAS)
photo = ImageTk.PhotoImage(image)
# Create canvas
self.canvas = Canvas(right_frame, width=800, height=700)
self.canvas.create_image(0, 0, image=photo, anchor="nw")
self.canvas.pack()
self.canvas.bind("<B1-Motion>", self.paint)
mainloop()
def paint(self, event):
python_green = "#476042"
x1, y1 = (event.x - 1), (event.y - 1)
x2, y2 = (event.x + 1), (event.y + 1)
self.canvas.create_oval(x1, y1, x2, y2, fill=python_green, outline=python_green, width=10)
if __name__ == "__main__":
Main().main()
수정 :
추가 된이 두 가지 방법이에
def on_button_press(self, event):
self.x = event.x
self.y = event.y
def on_button_release(self, event):
python_green = "#476042"
x0,y0 = (self.x, self.y)
x1,y1 = (event.x, event.y)
변경된 캔버스 :
self.canvas.bind("<ButtonPress-1>", self.on_button_press)
self.canvas.bind("<ButtonRelease-1>", self.on_button_release)