我只是尝试使用来自此来源的一个简单示例来学习库:
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 文件?
自述文件指出:
转换可以生成基本状态图,显示状态之间的所有有效转换。 基本图表支持生成 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 文件。