问题描述
我用paint方法绑定了paint事件。 当我刷新面板(应该调用事件处理程序)时,它会等待刷新完成后的代码,然后才调用它。有人为什么以及如何解决这个问题? 输出是
def paint(self,event):
print("here first")
try:
dc = wx.BufferedPaintDC(self)
dc.DrawBitmap(self.bmp,0)
print("time here2",time.time())
except:
pass
def NextFrame(self):
self.Refresh()
time.sleep(5)
print("hey")
输出:
嘿
先到这里
时间在这里2 1615033876.9332623
如您所见,它首先打印 hey(这应该发生在“here first”和“time here2 .....”之后)
解决方法
self.Refresh() 在下一次事件循环迭代期间更新,正如萨克森州的罗尔夫所说。
Self Update() 仅在有要重新绘制的内容时立即重新绘制面板。
因此,解决方案是首先刷新()面板,然后一行更新()。
确保将绘制 event
绑定到正确的事件处理程序。
代码如下:
def bind_paint(self):
self.Bind(wx.EVT_PAINT,self.paint)
def call_paint(self):
self.Refresh() #will turn on the paint event
self.Update() #will go to event handler now