创建线 tkinter 后拖动圆弧

drag an arc after creating a line tkinter

这是画线的代码。是否可以让用户拖动一条线,使其形成一条曲线?

from tkinter import Canvas, Tk

# Image dimensions
w,h = 640,480

# Create canvas
root = Tk()
canvas = Canvas(root, width = w, height = h, bg = 'white')
canvas.pack()

def on_click(event):
    """ set starting point of the line """
    global x1, y1
    x1 = event.x
    y1 = event.y

def on_click_release(event):
    """ draw the line """
    canvas.create_line(x1, y1, event.x, event.y)

def clear_canvas(event):
    canvas.delete('all')

canvas.bind("<Button-1>", on_click) 
canvas.bind("<ButtonRelease-1>", on_click_release)
root.bind("<Key-c>", clear_canvas)

root.mainloop()

再次感谢你呜呜呜!!! :)))))

对于圆弧,您需要跟踪鼠标在屏幕上的移动,而不仅仅是起点和终点。

下面的代码只会创建从左下角到矩形右下角的圆弧,但是您可以通过更改 start 角度和 extent 添加任何其他您想要的圆弧圆弧的角度。

from tkinter import Canvas, Tk, ARC

# Image dimensions
w,h = 640,480

# Create canvas
root = Tk()
canvas = Canvas(root, width = w, height = h, bg = 'white')
canvas.pack()

# curve points
global points
global temp_arc
points = []
temp_arc = None

def arc():
    x = [point[0] for point in points]
    y = [point[1] for point in points]

    return canvas.create_arc(x[0], y[0], x[-1], y[-1], start = 0, style = ARC, width = 2, extent = 180)

def motion(event):
    global temp_arc
    points.append([event.x, event.y])
    if temp_arc != None:
        canvas.delete(temp_arc)
    temp_arc = arc()


def on_click_release(event):
    arc()
    global points    
    points = []

def clear_canvas(event):
    canvas.delete('all')

canvas.bind("<B1-Motion>", motion)
canvas.bind("<ButtonRelease-1>", on_click_release)
root.bind("<Key-c>", clear_canvas)

root.mainloop()