当我尝试在 python 中的 Transitions 库中导出“.svg”文件时出现问题

问题描述 投票:0回答:1

我只是尝试使用来自此来源的一个简单示例来学习库:

from transitions.extensions import GraphMachine
from functools import partial


class Model:

    def clear_state(self, deep=False, force=False):
        print("Clearing state ...")
        return True


model = Model()
machine = GraphMachine(model=model, states=['A', 'B', 'C'],
                       transitions=[
                           {'trigger': 'clear', 'source': 'B', 'dest': 'A', 'conditions': model.clear_state},
                           {'trigger': 'clear', 'source': 'C', 'dest': 'A',
                            'conditions': partial(model.clear_state, False, force=True)},
                       ],
                       initial='A', show_conditions=True)

model.get_graph().draw('my_state_diagram.svg', prog='dot')

但是当我运行它时 - 没有任何错误 -

my_state_diagram.svg
包含:

---
State Machine
---
stateDiagram-v2
  direction LR
  classDef s_default fill:white,color:black
  classDef s_inactive fill:white,color:black
  classDef s_parallel color:black,fill:white
  classDef s_active color:red,fill:darksalmon
  classDef s_previous color:blue,fill:azure
  
  state "A" as A
  Class A s_active
  state "B" as B
  Class B s_default
  state "C" as C
  Class C s_default
  
  B --> A: clear [clear_state]
  C --> A: clear [clear_state(False, force=True)]
  [*] --> A

我该如何解决这个问题? 我的第二个问题:如何导出 .dot 文件?

python svg graph dot pytransitions
1个回答
0
投票

自述文件指出:

转换可以生成基本状态图,显示状态之间的所有有效转换。 基本图表支持生成 mermaid 状态机定义,它可以与 mermaid 的实时编辑器、GitLab 或 GitHub 和其他 Web 服务中的 markdown 文件一起使用。 [...] 要使用更复杂的绘图功能,您需要安装 graphviz 和/或 pygraphviz 。要使用 graphviz 包生成图表,您需要手动或通过包管理器安装 Graphviz。

您看到的美人鱼导出或多或少是一个后备,因为您没有安装任何 Graphiv 库。因此,您的问题可能可以通过安装

pygraphviz
来解决,例如:

pip install pygraphviz

您可以通过查看图形类来验证正确的后端:

print(machine.graph_cls)
# without pygraphviz
>>> <class 'transitions.extensions.diagrams_mermaid.Graph'>
# with pygraphviz
>>> <class 'transitions.extensions.diagrams_pygraphviz.Graph'>

安装了

pygraphviz
后,过渡将使用它,因为这是“传统”默认设置。您的代码应该生成一个 SVG 文件。

© www.soinside.com 2019 - 2024. All rights reserved.