【发布时间】:2018-11-22 19:44:50
【问题描述】:
我写了这段代码来练习,它会在按下鼠标左键时移动我的标签:
def motion(self, event):
delta_x = event.x - self._drag_data["x"]
delta_y = event.y - self._drag_data["y"]
self.canvas.move(self._drag_data["item"], delta_x, delta_y)
self._drag_data["x"] = event.x
self._drag_data["y"] = event.y
接下来我尝试在定义的网格上移动标签,比如说 5 个像素。因此更容易将标签直接“对齐”在一起。
我该怎么做?有没有办法每 5 个像素移动一次标签?所以每隔 5 个像素,标签就会再次跳到光标下。
这是我在提取函数时找到的示例:
import tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.canvas = tk.Canvas(width=400, height=400)
self.canvas.pack(fill="both", expand=True)
self._drag_data = {"x": 0, "y": 0, "item": None}
self._create_token((100, 100), "white")
self.canvas.tag_bind("token", "<ButtonPress-1>", self.on_token_press)
self.canvas.tag_bind("token", "<ButtonRelease-1>", self.on_token_release)
self.canvas.tag_bind("token", "<B1-Motion>", self.on_token_motion)
def _create_token(self, coord, color):
(x,y) = coord
self.canvas.create_oval(x-25, y-25, x+25, y+25, outline=color, fill=color, tags="token")
def on_token_press(self, event):
self._drag_data["item"] = self.canvas.find_closest(event.x, event.y)[0]
self._drag_data["x"] = event.x
self._drag_data["y"] = event.y
def on_token_release(self, event):
self._drag_data["item"] = None
self._drag_data["x"] = 0
self._drag_data["y"] = 0
def on_token_motion(self, event):
delta_x = event.x - self._drag_data["x"]
delta_y = event.y - self._drag_data["y"]
self.canvas.move(self._drag_data["item"], delta_x, delta_y)
self._drag_data["x"] = event.x
self._drag_data["y"] = event.y
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
【问题讨论】:
标签: python canvas tkinter label