2

我很难找到一个绘制图形结构(如树/状态机)的python代码示例,您可以将数据输入/流式传输到其中,以便绘制最新数据。

4

2 回答 2

2

如果我理解正确,这段代码应该可以解决问题:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sys
import threading
import time

import networkx as nx # http://networkx.github.com/
import xdot # http://code.google.com/p/jrfonseca/wiki/XDot
import gtk

class MyClass(threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self) 
        self.graph = nx.DiGraph(name="my_tree")
        self.xdot = xdot.DotWindow()
        self.xdot.connect('destroy', gtk.main_quit)

    def run(self):
        gtk.main()

    def add_node(self, parent, node):

        self.graph.add_edge(parent, node)
        self.xdot.set_dotcode(nx.to_agraph(self.graph).to_string())
        self.xdot.show_all()

def main(argv=None):

    gtk.gdk.threads_init()
    my_class = MyClass()
    my_class.start()

    my_class.add_node(1, 2)
    time.sleep(0.5)
    my_class.add_node(1, 3)
    time.sleep(0.3)
    my_class.add_node(2, 4)
    time.sleep(1.3)
    my_class.add_node(2, 5)
    my_class.add_node(1, 6)

if __name__ == "__main__":
    sys.exit(main())
于 2013-03-15T21:27:15.953 回答
1

如果您要更新文件,然后定期从单独的进程中读取它,您可能需要考虑只编写一个简单的 Web 服务器并将您的浏览器用作 UI,然后使用 JSON,客户端定期请求数据。

你考虑过使用IPython吗?他们的 HTML Notebook 对使用matplotlib进行渲染有很好的支持。你可能仍然需要做一些 JavaScript 来获得你想要的东西,但是他们已经在那里做了很多工作,这些工作可以在开发者的 GitHub 帐户和其他东西上找到,但还没有在 master 中。

他们也有一个 Qt 控制台,它可能能够更好地执行您想要的操作。

于 2013-03-15T15:14:57.683 回答