强制重绘wxPython窗口,wxmpl图表
我在使用wxPython的时候遇到了一些问题,主要是我的窗口不刷新。现在我在用wxmpl画图,这个图可以放大、移动等等。有时候用户会画很多数据,然后放大查看一小部分,这样就可能导致窗口“卡住”。我指的就是图表没有更新,坐标轴的标签重叠在一起。虽然图表在修改,但更新的信息没有正确显示。如果你调整一下窗口的大小,图表就会正确重绘。
我花了很多时间去翻阅wx、wxmpl和matplotlib的源代码和文档……我找到的最好解决办法就是调整窗口大小来强制重绘(这样就能正确显示更新后的图表)。
# All of these fail - displays the same, incorrect plot
# (view is a wxmpl.PlotPanel object, which inherits from wx.Window among other things)
view.Refresh()
view.Update()
view.draw()
# This works, but is clearly less than ideal
view.SetSize((view.GetSize().width, view.GetSize().height+1))
view.SetSize((view.GetSize().width, view.GetSize().height-1))
我觉得应该有更好的方法——我真正想知道的是wx.Window.SetSize这个函数是怎么让窗口重绘的,能不能直接调用这个?或者说,我有没有遗漏其他的方法?
4 个回答
1
我建议你试试先用 Show(False) 隐藏 PlotPanel,然后再用 Show(True) 显示它。
1
如果你找不到其他地方可以放这个,你可以试试
wx.Yield()
而不是用 Refresh
或 Update
。
3
panel.Layout() 这个命令非常好用,因为它和你调整窗口大小时使用的方法是一样的。我之前也遇到过刷新和更新的方法有问题的情况。相比之下,Layout 方法在那些方法失效的时候,通常能正常工作。