2017-12-27 39 views
1

用RAMを使用しました。新しいログファイルセットを使用してプロセスを再起動すると、古いタブが表示され、新しいタブが作成されます。私は、元のテキストウィジェットから使用されたラムは、私がこれを行うときにクリアされていないことに気づいた。どうすればこのラムを解放できますか?クリアは私がttk.notebookを作成し、各タブにテキストウィジェットを配置し、これらのテキストウィジェットにログイン/情報をダンプ私のGUIでTkinterのテキストウィジェット

例:あなたはをクリックし、「挿入」の例では

from tkinter import * 
from tkinter.ttk import Notebook 
main = Tk() 
def maker(): 
    nb = Notebook(main, name='nbook') 
    nb.grid(row=0, column=0, columnspan=2) 
    frame1 = Frame(name='frame1') 
    txt = Text(frame1, wrap=NONE) 
    txt.grid() 
    nb.add(frame1, text='textwindow') 
    txt.insert('end', 'hello\n' * 1000000) 

def remover(): 
    print(main.winfo_children()) 
    for tab in main.children['nbook'].tabs(): 
     main.children['nbook'].forget(tab) 
    print(main.winfo_children()) 

b1 = Button(main, text='Insert', command=maker) 
b1.grid(row=1, column=0) 
b2 = Button(main, text='Clear tabs', command=remover) 
b2.grid(row=1, column=1) 
main.mainloop() 

は、それはウィジェットを作成し、そこにテキストの束をダンプします。 "Clear tabs"ボタンでリムーバーを呼び出すと、すべてのタブは忘れられますが、そのテキストで使用されるRAMは決して空きません。テキストウィジェットを破棄しても、ラムは解放されません。どうすればこれを解放できますか?

+0

これは既知の「バグ」であり、あなたはそれについて何もできません。 – CommonSense

+0

@CommonSense – sidnical

答えて

1

属性のいずれかを設定する必要があるときにウィジェット全体を破棄すると、非常に貧弱なデザインのように聞こえるようになり、既に見たように高価なメモリリークが発生することで有名です。

いずれにしても、変更があったときにそれらを破棄/再作成するのではなく、既に所有しているウィジェットを設定するだけで、ずっとうまくいくと思います。

私が理解できたところでは、Textウィジェットにテキスト(つまりログ)を頻繁に表示する必要があると言いました。なぜなら、あなたが既に持っているテキストをクリアして、ウィジェット:

txt.delete('1.0', 'end') # clearing the text widget 
txt.insert('end', my_log) # inserting the log into the text widget 
+0

ありがとうございます。タブ上で.forget()を実行しているのは破壊と同じですか?一連のログが解析されるたびに、異なる量のタブが作成されます。 2回目のタブが2枚しか必要ではなく9枚目が表示されている場合は、まだ使用されていないので削除する必要がある7つのタブがあります。さらに、テキストウィジェットからすべてのテキストを削除しても、使用済みのRAMは解放されません。したがって、1組のログで2GBのRAMを使用し、次のRAMで500MBのRAMを使用する場合、アプリケーションはまだ2GBのRAMを保持しています。それは私が解放しようとしている記憶です。 – sidnical

+0

メモリリークがありますか? 'tkinter.tk.call(ウィジェット、 'delete'、index1、index2)'? – mentalita

+0

インデックスに1.0とENDを使用すると、これはテキストウィジェットのすべてのテキストを削除しますが、使用されたメモリは変更されません。 txt.delete( '1.0'、 'end')と同じです。私はあなたが何をしたのかと思う。 – sidnical

関連する問題