2016-04-06 3 views
0

У меня есть пример приложения, которое содержит главное окно с простой кнопкой «Draw Graph в новом окне». При нажатии этой кнопки это должно привести меня к дочернему окну и нарисовать график. Вместо этого график отображается в главном окне, средство просмотра NetworkX открывается в новом (третьем) окне, а дочернее окно пустое.Открытие NetworkX Viewer из существующего окна Tkinter

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

ответ

0

Я видел это раньше, и это пугает. Это не было разрешено напрямую, но если вам действительно нужно использовать tkinter для создания отдельного родительского GUI, единственное исправление, которое я видел, - это использовать другое решение для отображения. Плитка Matplotlib хорошо работает с networkx, и меню tkinter может вызвать появление экрана без проблем.

Смежные вопросы