Tkinter - 创建一个跟随我的鼠标位置的正方形
Tkinter - Creating a square that follows my mouse location
我必须在 canvas 上围绕我的指针创建一个正方形。我希望那个方块在我四处移动时跟随我的指针。
from tkinter import *
root = Tk()
f = Frame(root)
f.pack()
c = Canvas(f,bg = "black")
while root:
x = c.winfo_pointerx()
y = c.winfo_pointery()
c.create_rectangle(x,y,(x+10),(y+10),fill = "red")
root.mainloop()
root.mainloop()
现在当我 运行 这个矩形不加载时。
您的方法将不起作用,因为一旦您调用 mainloop
,它就会等待 window 关闭,因此它永远不会通过循环的第一次迭代。如果您从循环中删除 mainloop
,它在(无限)循环后将永远不会到达 mainloop
。
正确的方法是使用 callback events. Also, you should move the rectangle,而不是创建一堆新的。尝试这样的事情:
def callback(event):
x, y = event.x, event.y
c.coords(rect, x - 10, y - 10, x + 10, y + 10)
root = Tk()
c = Canvas(root)
rect = c.create_rectangle(0, 0, 0, 0)
c.bind('<Motion>', callback)
c.pack()
root.mainloop()
我必须在 canvas 上围绕我的指针创建一个正方形。我希望那个方块在我四处移动时跟随我的指针。
from tkinter import *
root = Tk()
f = Frame(root)
f.pack()
c = Canvas(f,bg = "black")
while root:
x = c.winfo_pointerx()
y = c.winfo_pointery()
c.create_rectangle(x,y,(x+10),(y+10),fill = "red")
root.mainloop()
root.mainloop()
现在当我 运行 这个矩形不加载时。
您的方法将不起作用,因为一旦您调用 mainloop
,它就会等待 window 关闭,因此它永远不会通过循环的第一次迭代。如果您从循环中删除 mainloop
,它在(无限)循环后将永远不会到达 mainloop
。
正确的方法是使用 callback events. Also, you should move the rectangle,而不是创建一堆新的。尝试这样的事情:
def callback(event):
x, y = event.x, event.y
c.coords(rect, x - 10, y - 10, x + 10, y + 10)
root = Tk()
c = Canvas(root)
rect = c.create_rectangle(0, 0, 0, 0)
c.bind('<Motion>', callback)
c.pack()
root.mainloop()