强制重画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用来重绘窗口的方法,而只是调用它。还是我在某处错过了另一种方法?     
已邀请:
        panel.Layout()命令是一个不错的选择,因为它与调整窗口大小时调用的方法完全相同。我也没有刷新和更新方法的麻烦。当这两个失败时,布局似乎可以工作。     

bab

        如果您无法将其放置在其他任何地方,可以尝试
wx.Yield()
而不是
Refresh
Update
。     
        我还将在PlotPanel上尝试Show(False),然后Show(True)。     
        在需要大量计算的应用程序中,您期望计算超过0.1秒的时间,并且可能会有一些用户输入,因此通常不建议在GUI线程中进行大量绘制。 如果您将所有耗时的任务(例如计算,图像调整(例如缩放))移至非GUI线程,则不知道您的具体情况,而是一般方法。只需一个普通的Python线程就可以了,一旦完成了很长的部分,就可以刷新GUI。当然,在计算期间,显示某种“正在等待”符号对用户来说是友好的。同时禁用其他控件,使无聊的用户将无法在计算过程中进行任何更改。 从我早期使用Java到后来使用Python(主要是与网络操作有关的情况下,绝不应该在GUI线程中使用)以来,我就一直困扰着该问题。 如果需要花费大量时间进行图像调整(或图形生成),则后台线程可以在wxMemoryDC中准备图像,然后在wxDC :: Blit中将其显示在您选择的窗口中。我不知道是否可以使用组件wxmpl.PlotPanel完成此操作,因此您必须对此进行研究。     

要回复问题请先登录注册