网络增长动画

时间:2017-03-14 11:01:15

标签: python tkinter networkx

我正在使用Networkx Viewer库编写python程序。该程序的目标是绘制一个图形(即一组由顶点连接的节点),并使该图形“生长”。随着时间的推移(即,新节点随着时间的推移而出现)。我根据我从here获得的类似工作示例编写了以下代码。

过去24小时我一直试图解决这个问题,但仍然无法让它发挥作用。问题似乎与之后的方法有关。如果我删除相应的行,程序会吐出画布显示;否则,它不会显示任何内容。有谁知道我怎么能让它发挥作用?

import tkinter as tk
import networkx as nx
from networkx_viewer import GraphCanvas


class GraphGrower(tk.Tk):
def __init__(self, graph):
    tk.Tk.__init__(self)
    self.graph_item = graph
    self.canvas = GraphCanvas(self.graph_item)
    self.canvas.grid(row=0, column=0, sticky='NESW')

def add_node_after(self,node_num):
    self.graph_item.add_node(node_num)
    self.canvas = GraphCanvas(self.graph_item)
    self.canvas.grid(row=0, column=0, sticky='NESW')
    self.canvas.after(10000, self.add_node_after(str(int(node_num)+1))) 
# REMOVE THE ABOVE LINE AND IT UPDATES THE GRAPH TO A 5 VERTEX GRAPH


# Graphs can be found at
# https://networkx.github.io/documentation/networkx-1.10/reference/generators.html
G = nx.fast_gnp_random_graph(4,0.85)

app = GraphGrower(G)
app.add_node_after(str(5))

app.mainloop()

1 个答案:

答案 0 :(得分:0)

你错误地使用了。考虑这行代码:

self.canvas.after(10000, self.add_node_after(str(int(node_num)+1))) 

与此完全相同:

result = self.add_node_after(str(int(node_num)+1))
self.canvas.after(10000, result)

看到问题? after需要 callable - 对函数的引用。如果需要传递参数,可以将参数作为参数添加到after

node = str(int(node_num)+1)
self.canvas.after(10000, self.add_node_after, node)