Попытка получить простое приложение Tkinter для отображения графика networkx, когда пользователь нажимает кнопку. Вот код, который у меня есть:
import tkinter as tk
from tkinter import filedialog
import pandas as pd
import copy
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg#, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.init_window()
def UploadAction(self,event=None):
filename = filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes=(()))
def runAnalysis(self,event=None):
df = pd.DataFrame({'from': ['B', 'C', 'D', 'E','F','F'], 'to': ['A', 'A', 'A', 'A','C','B']})
node_sizes = [2000,26400,2000,2000,2000,2000]
node_colors = ['#3da4ab','#fe8a71','#3da4ab','#fe8a71','#f6cd61','#f6cd61']
f = plt.figure(figsize=(5,4))
a = f.add_subplot(111)
plt.axis('off')
# Build your graph
G = nx.from_pandas_edgelist(df, 'from', 'to')
# Plot it
nx.draw(G, node_size=node_sizes, node_color=node_colors, with_labels=True, linewidths=0, edgecolors='black')
canvas = FigureCanvasTkAgg(f, master=self.master)
canvas.show()
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
#plt.show()
def init_window(self):
self.master.title('Title... ')
self.pack(fill=BOTH, expand=1)
quitButton = Button(self, text="Quit",command=self.master.destroy)
quitButton.place(x=0, y=0)
uploadButton = Button(self,text="UploadFile",command=self.UploadAction)
uploadButton.pack()
runNetworkButton = Button(self,text="run analysis")
runNetworkButton.pack()
r = tk.Tk()
r.geometry("800x400")
app = Window(r)
r.mainloop()
Когда я нажимаю кнопку запуска анализа анализа, ничего не происходит. Кто-нибудь может увидеть, что я здесь делаю не так? Я подозреваю, что это как-то связано с canvas = FigureCanvasTkAgg(f, master=self.master)
Заранее спасибо!