【发布时间】:2011-09-21 10:55:08
【问题描述】:
我在刷新 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 做了什么来重绘窗口,然后直接调用它。或者,我是否在某个地方错过了另一种方法?
【问题讨论】:
-
您究竟是在哪里打这些电话的?如果您在错误的位置调用刷新命令,它将不起作用。我是 wxpython 的普通用户,我确实遇到了和你类似的问题,但是将 widget.Refresh() 调用放在正确的位置总是对我有用。
-
我在重置窗口中绘图的限制后立即调用它,这是在左键向上事件上。
-
我正在使用多个 wx.Panel,我 Hide()/Show() 的结果完全相同。只有正确刷新它们的是调整窗口大小。正在使用 window.Layout(),它适用于第一个开关,但不适用于其余开关。