2016-04-06 15 views
0

Basit bir tuşa sahip "Ana pencereyi yeni pencerede çiz" ana penceresini içeren örnek bir uygulamam var. Bu tuşa bastığınızda beni bir çocuk penceresine götürmeli ve orada bir grafik çizmeliyim. Bunun yerine, grafik ana pencerede çizilir, NetworkX görüntüleyici yeni (üçüncü) bir pencerede açılır ve alt pencere boştur.NetworkX Viewer'ı var olan bir Tkinter penceresinden açma

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

cevap

0

Bunu daha önce de görmüştüm, ve burası yanlış. Doğrudan çözümlenmemiştir, ancak ayrı bir ana GUI'ye sahip olmak için teneffüs kullanmanız gerekiyorsa, gördüğüm tek düzeltme başka bir görüntüleme çözümü kullanmaktır. Matplotlib'in pyplot'u networkx ile iyi çalışır ve titiz bir menü ekranın hiçbir sorun olmadan ortaya çıkmasına neden olabilir.