Я пытаюсь создать простой графический интерфейс с использованием Tkinter, который использует Matplotlib для генерации большого количества графиков и сохраняет их на жесткий диск.
В приложении приведен простой код, который делает это, однако после сохранения всех графиков графический интерфейс Tkinter закрывается и сценарий останавливается.Я думаю, что эта проблема может быть связана с plt.close (), потому что когда я удаляю plt.close () , окно GUI больше не закрывается, но неудивительно, что память быстро заполняется, покавсе происходит сбой.
Вместо plt.close () я попытался использовать plt.clf () , plt.gcf (). clear () , fig.clear () и ни один из них не работал.Они заставляют окно GUI оставаться, но они вызывают проблему с памятью.
Кто-нибудь знает, почему plt.close () закрывает окно графического интерфейса Tkinter и как его можно предотвратить? Мне нужен графический интерфейс, чтобы остаться и вывести объекты из памяти, когда я 'с ними покончено.
Я использую Python3.6.3rc1, Windows 7, Tkinter 8.6 и Matplotlib 3.0.2.
from tkinter import *
import matplotlib.pyplot as plt
import os
def make_plot():
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]
for j in range(0,20):
fig = plt.figure(num=None, figsize=(20, 10), dpi=200, facecolor='w', edgecolor='w')
plt.plot(x,y)
plt.xlabel("x")
plt.ylabel("y")
out_name = os.getcwd()+ "\\" + str(j)+".png"
print(out_name)
plt.savefig(out_name)
plt.close()
class Application(Frame):
def run_make_plot(self):
make_plot()
def createWidgets(self):
self.button = Button(self)
self.button["text"] = "Plot"
self.button["command"] = self.run_make_plot
self.button.pack()
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.createWidgets()
root = Tk()
app = Application(master=root)
app.mainloop()
root.destroy()