마우스로 tkinter 캔버스에 직사각형을 만드는 방법에 대한 예제 코드를 제공합니다. 이 절차가 필요한 절차와 방법을 이해하는 데 도움이되기를 바랍니다. 그 후, 당신의 특별한 문제에 적응 시키십시오. 희망이 당신을 돕고 최고의 안부.
예제 코드 : 사용자가 마우스로 사각형 개체를 그리는 데 사용할 수있는 tkinter 캔버스를 만드는 방법. 사용 단계 및 방법의
import tkinter as tk
class App(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self._createVariables(parent)
self._createCanvas()
self._createCanvasBinding()
def _createVariables(self, parent):
self.parent = parent
self.rectx0 = 0
self.recty0 = 0
self.rectx1 = 0
self.recty1 = 0
self.rectid = None
self.move = False
def _createCanvas(self):
self.canvas = tk.Canvas(self.parent, width = 800, height = 400,
bg = "white")
self.canvas.grid(row=0, column=0, sticky='nsew')
def _createCanvasBinding(self):
self.canvas.bind("<Button-1>", self.startRect)
self.canvas.bind("<ButtonRelease-1>", self.stopRect)
self.canvas.bind("<Motion>", self.movingRect)
def startRect(self, event):
self.move = True
#Translate mouse screen x0,y0 coordinates to canvas coordinates
self.rectx0 = self.canvas.canvasx(event.x)
self.recty0 = self.canvas.canvasy(event.y)
#Create rectangle
self.rect = self.canvas.create_rectangle(
self.rectx0, self.recty0, self.rectx0, self.recty0, fill="#4eccde")
#Get rectangle's canvas object ID
self.rectid = self.canvas.find_closest(self.rectx0, self.recty0, halo=2)
print('Rectangle {0} started at {1} {2} {3} {4} '.
format(self.rect, self.rectx0, self.recty0, self.rectx0,
self.recty0))
def movingRect(self, event):
if self.move:
#Translate mouse screen x1,y1 coordinates to canvas coordinates
self.rectx1 = self.canvas.canvasx(event.x)
self.recty1 = self.canvas.canvasy(event.y)
#Modify rectangle x1, y1 coordinates
self.canvas.coords(self.rectid, self.rectx0, self.recty0,
self.rectx1, self.recty1)
print('Rectangle x1, y1 = ', self.rectx1, self.recty1)
def stopRect(self, event):
self.move = False
#Translate mouse screen x1,y1 coordinates to canvas coordinates
self.rectx1 = self.canvas.canvasx(event.x)
self.recty1 = self.canvas.canvasy(event.y)
#Modify rectangle x1, y1 coordinates (final)
self.canvas.coords(self.rectid, self.rectx0, self.recty0,
self.rectx1, self.recty1)
print('Rectangle ended')
if __name__ == "__main__":
root = tk.Tk()
root.geometry("600x400")
app = App(root)
root.mainloop()
개요 :
- 이
tk.Canvas()
방법을
- 바인드 마우스 이벤트
tk.Canvas
위젯에 자신의 콜백과 <Button-1>
, <ButtonRelease-1>
및 <Motion>
을 사용 Tk()
창에 캔버스 위젯을 만듭니다.
- 다음 이벤트 각각에 대해
3.1 마우스 상태 변수 (예 : self.move)를 업데이트하거나 확인하십시오.
3.2 변환 마우스 포인터의 화면을 X, Y 좌표 캔버스 .canvasx(event.x)
방법 및 .canvasy(event.y)
변수 self.rectx0
, self.recty0
, self.rectx1
, self.recty1
이러한 변환을 corrdinates 저장소를 사용하여 조정한다. event.x
및 event.y
은 마우스 포인터 화면 좌표를 제공합니다.
3.3 캔버스 방법 .create_rectangle(x0, y0, x1, y1, option, ...)
을 사용하여 사각형을 만들거나 캔버스 방법 .coords(tagOrId, x0, y0, x1, y1)
을 사용하여 사각형 좌표를 수정하십시오. 여기서, x0
, y0
, x1
, y1
은 직사각형 오브젝트의 좌상 구석 및 오른쪽 아래 구석 x & 캔버스 좌표를 나타내며, tagOrId
은 직사각형 오브젝트 ID로 표시됩니다.
3.4 <Button-1>
에 대해서만 생성 된 사각형 객체의 ID를 변수에 저장해야합니다. 이 변수는 <Motion>
및 <ButtonRelease-1>
중에 .coords() method
이 호출 될 때마다 tagOrId에 값을 제공합니다.
당신이 무엇을 요구하는지 이해하기가 어렵습니다. 사각형을 그릴 때 사각형의 한 모서리에 x 또는 y 좌표를 조금 더 추가하면됩니다. –
이미지 삽입을 시도했지만 나도 허용하지 않습니다. 다양한 모양과 크기로 그릴 수 있기를 원합니다. 내가 뭘 할지라도 그들은 사각형으로 그립니다. 내가 사용하고있는 코드는 단지 나에 의해 만들어지지 않았습니다. 방금 사각형이 아닌 원을 사용하도록 수정했습니다. – Kkheartsmak
직사각형이나 이미지에 관한 질문입니까? 사각형의 한 모퉁이에 대한 좌표를 변경해 보셨습니까? –