我有一个操作鼠标事件处理程序中的对象的画布。修改对象之后,我想触发相同Canvas的OnPaint()事件来显示(重新渲染)所做的更改。什么是正确的方法来做到这一点?它不会让我直接调用OnPaint()。另外,从某种意义上来说,是从另一个事件触发“错误”的事件,或者可能导致麻烦?在wxPython画布中强制绘制
3
A
回答
3
我只需调用self.Refresh()或者RefreshRect()并传递需要重绘的区域。
1
我试过了Mike.Driscoll建议的self.refresh()。这部分工作。我使用鼠标事件移动自己的对象,然后重新绘制图像 - 渲染我的对象。所以鼠标事件正在更新坐标,并且重绘正在更新显示。问题在于refresh()似乎被称为延迟或者比鼠标事件的优先级低。刷新()因此产生波涛汹涌的显示。
因为我使用通过wxDemo用于滚动区缓冲显示,我从Paint事件以下行:
dc = wx.BufferedPaintDC(self, self.buffer, wx.BUFFER_VIRTUAL_AREA)
而且叫我与DC绘图功能从鼠标事件处理程序中。完成后,dc被释放并且(根据演示中的注释)被复制到屏幕上。以前我不清楚Paint事件是如何处理DC的,所以我试图调用事件。事实证明,你可以使用该DC,并从鼠标事件内部渲染。这会导致我的自定义绘制对象的平滑拖动。
相关问题
- 1. WPF强制重绘画布
- 2. 在ASP.Net中绘制画布
- 3. 如何在画布上绘制画布
- 4. 在画布中绘制动画曲线
- 5. Matplotlib画布绘制
- 6. HTML5画布绘制
- 7. 绘制到画布
- 8. 在画布上绘制ArcTo
- 9. 在画布上绘制
- 10. 在画布上绘制EditText
- 11. 在Scala.js上绘制画布
- 12. 在画布上绘制SVG
- 13. 绘制在画布上
- 14. 绘制在画布光线
- 15. 在子画布上绘制
- 16. 在控制台上绘制HTML5画布
- 17. 强制画布更新
- 18. 在html5画布中绘制youtube
- 19. 在SurfaceView中绘制多个画布
- 20. 在Android的画布中绘制球体?
- 21. 在循环中绘制到画布
- 22. Android Views在画布中绘制
- 23. 在画布中心绘制圆圈
- 24. Java:如何在画布中绘制?
- 25. 在Android画布中绘制2D曲线?
- 26. 在循环中绘制画布
- 27. 在画布中间绘制图像
- 28. Android:在循环中绘制到画布
- 29. HTML5画布绘制拖放
- 30. 画布 - 绘制时间
张贴后,我发现并尝试了。这正是我以为我在寻找的东西。但是,当拖动我自己的一个对象时,它非常不稳定。看起来,refresh()只排队重绘事件,但这可能不会发生一段时间 - 特别是在处理鼠标移动时。好的尝试+1。 – phkahler
通常,当人们提到wxPython邮件列表上的东西不连贯时,他们建议使用双缓冲来做。 –
是的,我正在使用一个屏幕位图。这不是那种波涛汹涌的。即使这样,情况也是非常不连贯的。我很清楚重绘不是经常发生。没有闪烁,更新是直接的,但很少。 – phkahler