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