Python 从现有Tkinter窗口打开NetworkX查看器

Python 从现有Tkinter窗口打开NetworkX查看器,python,graph,tkinter,networkx,tkinter-canvas,Python,Graph,Tkinter,Networkx,Tkinter Canvas,我有一个示例应用程序,其中包含一个带有简单按钮“在新窗口中绘制图形”的主窗口。点击这个按钮,它会带我到一个子窗口,并在那里画一个图形。相反,图形在主窗口中绘制,NetworkX查看器在新(第三个)窗口中打开,子窗口为空 import Tkinter as tk import networkx as nx from networkx_viewer import Viewer class MainWindow(tk.Frame): counter = 0 def __init__(self, *a

我有一个示例应用程序,其中包含一个带有简单按钮“在新窗口中绘制图形”的主窗口。点击这个按钮,它会带我到一个子窗口,并在那里画一个图形。相反,图形在主窗口中绘制,NetworkX查看器在新(第三个)窗口中打开,子窗口为空

import Tkinter as tk
import networkx as nx
from networkx_viewer import Viewer

class MainWindow(tk.Frame):
counter = 0
def __init__(self, *args, **kwargs):
    tk.Frame.__init__(self, *args, **kwargs)
    self.button = tk.Button(self, text="Draw Graph in a new window", 
                            command=self.create_window)
    self.button.pack(side="top")

def create_window(self):
    self.counter += 1
    t = tk.Toplevel(self)
    t.wm_title("Window #%s" % self.counter)
    l = tk.Label(t, text="This is window #%s" % self.counter)
    l.pack(side="top", fill="both", expand=True, padx=100, pady=100)

    G=nx.complete_graph(30)
    G.add_edge('a','b')
    G.add_edge('b','c')
    G.add_edge('c','a')
    G.add_edge('c','d')
    G.add_edge('b','d')


    G.add_edge('p','q')
    G.add_edge('q','r')
    G.add_edge('r','p')
    G.add_edge('r','s')
    G.add_edge('q','s')

    G.add_edge('w','x')
    G.add_edge('x','y')
    G.add_edge('y','w')
    G.add_edge('y','z')
    G.add_edge('x','z')        

    app = Viewer(G)
    app.mainloop()

if __name__ == "__main__":
 root = tk.Tk()
 main = MainWindow(root)
 main.pack(side="top", fill="both", expand=True)
 root.mainloop()

我以前见过这种情况,这是令人困惑的。它还没有被直接解决,但是如果您真的需要使用tkinter来拥有一个单独的父GUI,我看到的唯一修复方法就是使用另一个显示解决方案。Matplotlib的pyplot与networkx配合良好,tkinter菜单可以生成没有问题的显示