python - 如何在 tkinter 中用箭头连接两个状态圆圈?

标签 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()

关于python - 如何在 tkinter 中用箭头连接两个状态圆圈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1996377/

相关文章:

python - 在元组中搜索集合

python - 在 Django 模型中存储图像列表

python - 环形包裹(x 和 y 包裹)二维数组上一组位置的质心?

python - 如何为 tkinter Scale 小部件滚动条使用非整数、浮点值?

javascript - 有限状态机解析

computer-science - L1 = {a^n b^n | n < 4 } 和 L2 = {a^n b^n | n < 10^10^10 },常规语言?

python - 使用 openpyxl 刷新 Excel 中的数据透视表

python - 为什么 Tkinter 可执行文件无法捕获组合键?

python - 如何使用 matplotlib 在 python tkinter 中显示独立于屏幕分辨率的图形?

python - 有史以来最没有帮助的错误 : TypeError: unhashable type: 'list'