以下のコードでメモリ リークが発生しています。別々のモジュールでデータを作成および処理していますが、これは私が見ることができるリークの原因ではありません。この問題を修正する方法はわかりませんが、縮尺を変更するたびに描画クラスの新しいインスタンスを呼び出しているためだと思います。このスレッドを読みましたがself.canvas.destroy()
、コードにメソッドを実装しようとするとエラーが発生します。私の問題を解決するために、以下のコードにどのような方法を適用できるか疑問に思っていましたか?
コードスニペット:
from Tkinter import *
class Interface_On:
def Interface_Elements(self, master):
self.master=master
self.master.title( "My Canvas")
self.c=Canvas(self.master, width=1000, height=1000, bg='black')
self.c.grid(row=0, column=0)
menubar = Menu(master)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="New", command=self.Edit_New)
menubar.add_cascade(label="File", menu=filemenu)
master.config(menu=menubar)
drawing_utility_run=Drawing_Utility()
drawing_utility_run.drawer(self.c)
def Edit_New(self):
Export_Poscar = self.Export_Poscar = Toplevel(self.master)
self.Export_Poscar.title('New Ribbon...')
self.Export_Poscar.geometry('300x400')
self.scale_Label= Label(Export_Poscar, width=15, text='scale:')
self.scale_Label.grid(row=2, column=0)
self.scale_Label= Label(Export_Poscar, width=15, text='scale:')
scale_var = StringVar()
self.scale_Spin= Spinbox(Export_Poscar, from_=1, to=1000, increment=1, width=15, command=self.execute_request_immediate, textvariable=scale_var)
self.scale_Spin.grid(row=2, column=2)
def execute_request_immediate(self):
global scale
User_Set_Scale=float(self.scale_Spin.get())
scale=User_Set_Scale
drawing_utility_run=Drawing_Utility()
drawing_utility_run.drawer(self.c)
class Drawing_Utility:
def drawer(self, canvas):
self.canvas=canvas
self.canvas.delete('all')
import Generator #generates my data (imports 'scale' from above where possible)
Generator_run=Generator.Generator()
Generator_run.generator_go()
from Generator import coordinates_x_comp, coordinates_y_comp #imports necessary lists
import Processor #Imports coordinates_x_comp, coordinates_y_comp, cleans and analyses
Process_xy_Data=Processor.Data_Processor()
Process_xy_Data.Process_Data()
from Processor import p_1, p_2
for Line in xrange(len(p_1)):
self.canvas.create_line(p_1[Line],p_2[Line], fill='red', activefill='blue', width=1)
root=Tk()
run_it_canvas=Interface_On()
run_it_canvas.Interface_Elements(root)
root.mainloop()