0

我想通过单击鼠标删除使用 Tkinter/Python 在画布上绘制的线条。

此代码将线绘制为对象,然后立即将其删除:

#!/usr/bin/python
from Tkinter import *

master = Tk()
w = Canvas(master, width=200, height=200)
w.pack()
i=w.create_line(0, 0, 100, 100)
w.delete(i)

mainloop()

在鼠标单击时删除行的代码是什么(左键或右键无关紧要)?

谢谢。

4

2 回答 2

1

这将做到:

from Tkinter import *

master = Tk()
w = Canvas(master, width=200, height=200)
w.pack()
i=w.create_line(0, 0, 100, 100)

# Bind the mouse click to the delete command
w.bind("<Button-1>", lambda e: w.delete(i))

mainloop()

编辑以回应评论

是的,上述解决方案将在窗口中的任意位置注册鼠标单击。如果您希望它仅在单击靠近它时删除该行,您将需要更复杂的东西。即,像这样:

from Tkinter import *

master = Tk()
w = Canvas(master, width=200, height=200)
w.pack()
i=w.create_line(0, 0, 100, 100)

def click(event):
    # event.x is the x coordinate and event.y is the y coordinate of the mouse
    if 80 < event.x < 120 and 80 < event.y < 120:
        w.delete(i)

w.bind("<Button-1>", click)

mainloop()

x只有当鼠标点击的和y坐标在直线的 20 点以内时,该脚本才会删除直线。

请注意,我不能完美地设置它。您将不得不根据您的需要对其进行调整。

于 2013-09-25T21:43:14.507 回答
0
from Tkinter import *
import math

master = Tk()
w = Canvas(master, width=200, height=200)
w.pack()
x1=0
y1=0
x2=100
y2=100
delta=10
i=w.create_line(x1, y1, x2, y2)

def click(event):
# event.x is the x coordinate and event.y is the y coordinate of the mouse
    D = math.fabs((event.y-event.x))/math.sqrt(2)    
    if D < delta and x1 - delta < event.x < x2 + delta:
            w.delete(i)    
w.bind("<Button-1>", click)

mainloop()
于 2013-09-27T20:13:24.050 回答