0

スクロール可能なウィンドウに非常に大きな地図を表示しようとしています。アイデアは、各タイルの画像を含む正方形のタイルのグリッドがあり、スクロールしてそれらを見ることができるということです。各タイルにはいくつかの数値情報もあり (これは wx.StaticText で描画できます)、タイルをクリックして右クリックすると、特定のアクションを実行できます。

これに対する私の最初のパスは、各タイルに wx.Panel を使用し、マップに wx.ScrolledWindow を使用することでした。ただし、wx.ScrolledWindow は、多数のタイル (約 4 fps でスクロール) ではパフォーマンスが非常に悪いようです。

私の次の試みは、wx.dc を使用してそれぞれ約 100 のタイルをレンダリングする正確に 9 つの大きなパネルを使用して、flyweightパターンを使用することでした。ユーザーが一方向にスクロールし、パネルが画面の外に移動すると、それらをデッドプールに追加し、デッドプールから新しいパネルを再構成します。ただし、パネルが再配置されるたびにかなりのちらつきがあるため、これも特にうまく機能していないようです。また、wx.ScrolledWindow 内のパネルpanel.SetPosition(...)は、仮想空間の原点ではなく、現在のスクロール位置に従って (たとえば) 配置されているようです。これにより、パネルが移動している間にスクロール位置が変化する可能性があるため、競合状態を回避することが困難になります。まだ再構成中です。

wxPythonで非常に大きなスクロールコンテンツをレンダリングするために推奨されるパターンは何ですか? 私はネイティブ WM でこれを実現する方法に精通しており、wxWidgets にかなり大きなスクロール領域が実装されているのを見てきました。しかし、wxPython の大きなスクロール コンテンツの例はないようです。

4

1 に答える 1

0

どうやら大きなコンテンツをスクロールするより良い方法は、wx.lib.floatcanvasを使用することです。GitHubに妥当なデモがあります。ネイティブの速度ではありませんが、大きなグラフ サイズでも使用できます。

MouseWheel イベントに表示されないように見えるため、(Mac の) ネイティブ スクローラーがサポートする 2D マルチタッチ パンを行う方法がわかりません。誰かのユースケースにとって重要な場合、それは欠点になる可能性がありますが、それは私のプロジェクトにとって世界の終わりではありません.

于 2013-05-04T07:57:06.870 に答える