2016-04-06 23 views
0

Ich habe eine Beispielanwendung, die ein Hauptfenster mit einer einfachen Schaltfläche "Grafik in einem neuen Fenster zeichnen" enthält. Wenn ich auf diese Schaltfläche klicke, sollte ich zu einem untergeordneten Fenster gehen und dort eine Grafik zeichnen. Stattdessen wird das Diagramm im Hauptfenster gezeichnet, der NetworkX-Viewer wird in einem neuen (dritten) Fenster geöffnet und das untergeordnete Fenster ist leer.Öffnen von NetworkX Viewer aus einem vorhandenen Tkinter-Fenster

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() 

Antwort

0

Ich habe das vorher gesehen und es ist verwirrend. Es ist nicht direkt gelöst worden, aber wenn Sie wirklich tkinter verwenden müssen, um eine separate übergeordnete GUI zu haben, ist die einzige Korrektur, die ich gesehen habe, eine andere anzeigende Lösung zu verwenden. Matplotlibs Pyplot funktioniert gut mit networkx, und ein tkinter-Menü kann das Display ohne Probleme erzeugen.

Verwandte Themen