强制重绘wxPython窗口,wxmpl图表

7 投票
4 回答
4420 浏览
提问于 2025-04-16 20:10

我在使用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()

而不是用 RefreshUpdate

3

panel.Layout() 这个命令非常好用,因为它和你调整窗口大小时使用的方法是一样的。我之前也遇到过刷新和更新的方法有问题的情况。相比之下,Layout 方法在那些方法失效的时候,通常能正常工作。

撰写回答