1

Tkinter Canvas に 86,000 個 (小さな円) を描画したいと考えています。平均すると、8,600 円ほどになります。一度に描かれる円はすべて同じ (サイズ、色) です。円の半径は、描画される円の数 (描画する円が多数ある場合は 1 ~ 2 ピクセル) に関連していますが、半径の違いによる全体的な影響はほとんどありません。

canvas.create_oval(px+r,py+r,px-r,py-r,fill='green')計算時間にかなりのコストがかかります。円を事前に作成し、必要に応じてそのコピーをキャンバスに貼り付けるのが理想的です。

現時点では、canvas.create_oval(...)86,000 回の呼び出しに約 20 秒かかります。(描画する円を決定するロジック自体は 100 ミリ秒未満で実行されます。)

円をすべて個別に作成するのではなく、1 つの円をコピーするにはどうすればよいですか?

4

1 に答える 1

1

円の作成を高速化するためにできることは何もないと思います。キャンバスは 80,000 個のオブジェクトを処理するように設計されておらず、項目をコピーして貼り付ける機能をサポートしていません (単に同じ座標で新しいオブジェクトを作成する以外に)。それは数千の OK を処理し、私のマシンでは 10,000 でさえかなりのパフォーマンスですが、86,000 のアイテムは大量です。

指定されたサイズの単一の画像を作成してみてください (または事前に計算された画像があります)。キャンバス上のすべての画像を作成するために使用する単一の PhotoImage インスタンスを持つことができます。私のマシンでは、キャンバス上に 100,000 個の画像オブジェクトをわずか数秒で作成できます。ただし、それだけ多くのオブジェクトを削除するのは依然として非常に遅いです。

于 2014-02-04T16:52:28.623 に答える