314*_*141 2 python tkinter tkinter-canvas
我尝试使用以下代码绘制在tkinter中创建一行的点:
import tkinter as tk
from time import sleep
def myfunction(event):
x, y = event.x, event.y
x1 = (x+1)
y1 = (y+1)
canvas.create_line(x, y, x1, y1)
sleep(0.5)
root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()
root.bind('d', myfunction)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
可以理解的是,当我按下"d"时,该程序只能说明一点.我试过在myfunction函数中使用循环,如下所示:
def myfunction(event):
x, y = event.x, event.y
x1 = (x+1)
y1 = (y+1)
for x in range(0,5):
canvas.create_line(x, y, x1, y1)
sleep(0.1)
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我尝试了很多其他解决方案,但似乎都没有.
有这个问题的解决方案吗?
首先,您必须绑定到"<Motion>"事件,每次鼠标移动时都会触发该事件.
然后,您需要保存以前的鼠标坐标,以便有一个从中绘制线的位置.
像这样:
import tkinter as tk
def myfunction(event):
x, y = event.x, event.y
if canvas.old_coords:
x1, y1 = canvas.old_coords
canvas.create_line(x, y, x1, y1)
canvas.old_coords = x, y
root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()
canvas.old_coords = None
root.bind('<Motion>', myfunction)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3263 次 |
| 最近记录: |