0

[マハロの回答に再度クロス投稿]

私のPerl/TkスクリプトTk::TableMatrix::Spreadsheetには、モジュールを使用して表示されるグリッドのような初期スプレッドシートがあります。私のスプレッドシートはプログラムでと呼ばれて$ssいます。この最初のグリッドは、最初のスプレッドシートが表示される前にワイプされます。

$ss->pack('forget');

スクリプトもそのまま追加されますが$mw-> pack('forget');、これは必須ではありません。

私の質問は、[ファイル]-> [開く]ダイアログボックスから2番目のファイルを開き、最初のファイルが最初のグリッドを消去するのと同じように、表示された最初のファイルを消去する方法です。現在、2番目のファイルは、まだ表示されている最初のスプレッドシートの下に完全に新しいフレームとして表示されます。

よろしくお願いします。

4

1 に答える 1

1

「pack('forget')」は単にウィジェットをビューから削除します。それは削除されず、その中に表示されているデータに対しても何もしません。ウィジェットの破棄に失敗すると、実際には、スプレッドシート ウィジェットをどんどん作成するにつれて、大量のメモリ リークが発生します。

問題の最も迅速な解決策は、(destroy メソッドを使用して) 古いウィジェットを破棄し、新しいデータで再作成することです。もう 1 つの解決策は、ウィジェットを保持し、新しいファイルのデータを挿入する前に、deleteRows() を使用して既存のデータをすべて削除することです。

于 2009-05-08T11:10:02.190 に答える