Python 当用户使用tkinter单击2个位置时,如何在画布上绘制正方形

Python 当用户使用tkinter单击2个位置时,如何在画布上绘制正方形,python,tkinter,tkinter-canvas,Python,Tkinter,Tkinter Canvas,我正在编写一个应用程序,用户可以“绘制”画布,现在我想添加对形状的支持 我有一个名为paint_canvas的画布,我想在用户单击的两点之间绘制一个形状 def draw_square(事件): x1=事件.x y1=事件y #现在我想得到用户点击的下两点 #怎么样??????? 绘制画布=画布(根) 绘制画布。绑定(“”,绘制正方形) 您可以创建两个事件, 一个用于新闻发布会,一个用于发布。 在第一个事件中,您将x和y鼠标位置存储在另一个作用域中(startx、starty) 在第二个事件中,

我正在编写一个应用程序,用户可以“绘制”画布,现在我想添加对形状的支持
我有一个名为paint_canvas的画布,我想在用户单击的两点之间绘制一个形状

def draw_square(事件):
x1=事件.x
y1=事件y
#现在我想得到用户点击的下两点
#怎么样???????
绘制画布=画布(根)
绘制画布。绑定(“”,绘制正方形)
您可以创建两个事件, 一个用于新闻发布会,一个用于发布。 在第一个事件中,您将x和y鼠标位置存储在另一个作用域中(startx、starty)

在第二个事件中,您将鼠标位置存储在另一个范围(endx,endy)中的x和y鼠标位置,然后使用此坐标绘制图形

见:

以及:

如果要显示矩形动画,可以使用运动事件
您不必处理双重事件。只要单击两次,您就可以存储以前单击的坐标并绘制一个矩形(并重置以前存储的坐标):

from tkinter import *


def draw_square(event):
    x1 = event.x
    y1 = event.y
    w = event.widget ## Get the canvas object you clicked on
    if w.coords == None:
        w.coords = (x1,y1)
    else:
        w.create_rectangle(w.coords[0],w.coords[1],x1,y1,fill="#ff0000")
        w.coords = None

root = Tk()
paint_canvas = Canvas(root,width=400,height=400,bg="#ffffff")
paint_canvas.pack()
paint_canvas.bind('<Button-3>', draw_square)
paint_canvas.coords=None

root.mainloop()

我正在看你建议的第一个链接。我应该使用按钮释放事件吗?是的,在您的例子中是ButtonRelease-3Do,当用户按下鼠标按钮,拖动,然后释放时,是否要绘制?或者,是否希望用户单击、移动鼠标,然后再次单击?
def draw_square(event):
    x1 = event.x
    y1 = event.y
    w = event.widget ## Get the canvas object you clicked on
    if w.coords == None:
        w.coords = (x1,y1)
        w.temp = w.create_oval(x1-1,y1-1,x1+1,y1+1,fill="#00ff00")
    else:
        w.create_rectangle(w.coords[0],w.coords[1],x1,y1,fill="#ff0000")
        w.delete(w.temp)
        w.coords = None