isr*_*kir 3 python tkinter fsm
我目前正在用 tkinter 编写 fsm 编辑器。但是,我坚持连接两个州。我有两个问题:
1) 如何根据鼠标移动使过渡箭头可增长?
2)如何将箭头的起点贴在一个状态上,将箭头的终点贴在另一个状态上?
附注。您认为 tkinter 的文档是否足够好?
下面是一个展示这个概念的例子。简而言之,使用标签将线条与框相关联,并在用户移动鼠标时适当地调整坐标。
运行示例,然后在米色框中单击并拖动。
当然,对于生产代码,您需要制定一个更通用的解决方案,但希望这向您展示了创建一个带有箭头的框是多么容易,随着您移动框而调整。
from Tkinter import *
class CanvasDemo(Frame):
def __init__(self, width=200, height=200):
Frame.__init__(self, root)
self.canvas = Canvas(self)
self.canvas.pack(fill="both", expand="1")
self.canvas.create_rectangle(50, 25, 150, 75, fill="bisque", tags="r1")
self.canvas.create_line(0,0, 50, 25, arrow="last", tags="to_r1")
self.canvas.bind("<B1-Motion>", self.move_box)
self.canvas.bind("<ButtonPress-1>", self.start_move)
def move_box(self, event):
deltax = event.x - self.x
deltay = event.y - self.y
self.canvas.move("r1", deltax, deltay)
coords = self.canvas.coords("to_r1")
coords[2] += deltax
coords[3] += deltay
self.canvas.coords("to_r1", *coords)
self.x = event.x
self.y = event.y
def start_move(self, event):
self.x = event.x
self.y = event.y
root = Tk()
canvas = CanvasDemo(root)
canvas.pack()
mainloop()
Run Code Online (Sandbox Code Playgroud)