マウスイベントハンドラのオブジェクトを操作するCanvasがあります。オブジェクトを変更した後、同じキャンバスに対してOnPaint()イベントをトリガーして、変更を表示(再レンダリング)したいと考えています。これを行う正しい方法は何ですか? OnPaint()を直接コールすることはできません。また、何らかの意味で「間違っている」という別のイベントのイベントをトリガしているか、またはトラブルにつながる可能性がありますか?wxPython Canvasで強制的に再描画する
3
A
答えて
3
私はちょうどself.Refresh()またはRefreshRect()を呼び出し、再描画する必要がある領域を渡します。
1
私は、Mike Driscollの提案したように、self.refresh()を試しました。それは部分的に働いた。マウスイベントで自分のオブジェクトを移動してから、イメージを再描画してオブジェクトをレンダリングします。そこで、マウスイベントは座標を更新し、再描画はディスプレイを更新していました。問題は、refresh()が遅れて呼び出されたり、マウスイベントより優先度が低いように見えることです。したがって、Refresh()は不安定な表示を生成します。
私がスクロールエリアのためwxDemoを経由してバッファリングディスプレイを使用しておりますので、私はPaintイベントから次の行を取った:
dc = wx.BufferedPaintDC(self, self.buffer, wx.BUFFER_VIRTUAL_AREA)
を、マウスイベントハンドラ内からそのDCとの私の描画機能と呼ばれます。完了時にdcが解放され、(デモのコメントに従って)画面にコピーされます。ペイントイベントがどのようにDCを処理していたかは以前は分かりませんでしたので、私はイベントを呼び出そうとしていました。そのDCを使用し、マウスイベントの内部からレンダリングすることができます。これにより、私のカスタム描画オブジェクトのスムーズなドラッグが可能になります。
関連する問題
- 1. イベントハンドラ内で強制的にコントロールコンテンツを再描画する方法
- 2. 強制的にリッチテキストボックスにフォアグラウンドのみを再描画する
- 3. ウィジェットを強制的に再描画する方法
- 4. ビューを強制的に再描画する
- 5. フラッシュバグ - 強制的に画面の再描画
- 6. IE7でフラッシュコンテンツの強制的な再描画
- 7. img要素の強制再描画
- 8. UIScrollView CATiledLayer chaning後にズームを強制的に再描画するコンテンツ
- 9. vb6コントロールを強制的に再描画する方法はありますか?
- 10. 剣道-ui-angular2グリッド:グリッドを強制的に再描画する方法は?
- 11. Activity.onConfigurationChangedでビューの再描画を強制する方法
- 12. リストビューの再描画を強制するには?
- 13. Ext GWT(GXT)で再描画/再レイアウトを強制するには? GXTで
- 14. Core Graphicsを使用してウィンドウを強制的に再描画しますか?
- 15. すべてのタイルを描画するグリッドを強制的に
- 16. JavaFX 2.2:ListViewの再描画/更新を強制する方法
- 17. WPFコントロールの再描画を強制する
- 18. カスタムWPFコントロールのカスタム描画UIElementの再描画を強制します
- 19. 強制的にブラウザに強制的にサーバー側コードなしで再ロードする
- 20. Google Maps API v3.0で強制的に再描画するにはどうすればよいですか?
- 21. Firefoxでビデオ要素を強制的に再描画するにはどうすればよいですか?
- 22. 画面のDCC++に描画した後に強制描画する
- 23. フォーム上でオブジェクトを再描画する方法(wxPython)
- 24. バックキーを使用するとアクティビティを強制的に再描画することはできますか?
- 25. WPF強制的に再バインドする
- 26. ノードモジュールを強制的に再インストールする
- 27. this.stateが変更されたときにListViewを強制的に再描画する方法(dataSourceではなく)。
- 28. ActionScript 2を強制的にリストする方法コンポーネントを再描画するには?
- 29. 強制的なCSS再キャッシュ
- 30. すべてのウィジェットを再描画するよう強制する
投稿後、私はそれを見つけて試しました。まさに私が探していたと思ったものでした。しかし、私自身のオブジェクトの1つをドラッグすると、非常に不安定になります。 refresh()は再描画イベントをキューするだけですが、それはしばらくの間、特にマウスの動きを処理している間には起こらないかもしれません。良い+1を試してみてください。 – phkahler
通常、wxPythonのメーリングリストに不具合があると言われたら、ダブルバッファリングをすることをお勧めします。 –
ええ、私は画面外のビットマップを使用しています。しかし、そんなに不安定ではありませんでした。物事はそれでも非常に断続的でした。再塗装が頻繁に起こっていないことは私には明らかでした。ちらつきはなく、アップデートは即時であったが、まれであった。 – phkahler