我想使用wxpython实时显示随机游走的轨迹。但是,面板最后只更新一次,显示整个随机游走,而不是逐步更新并显示时间进程。
我的第一个想法是使用wx.ClientDC()。DrawPoint(),但结果如上所述,我没有看到正在绘制单个点,但只显示了最终结果。
所以我考虑使用wx.MemoryDC将轨迹绘制到存储在内存中的位图,然后使用wx.ClientDC.DrawBitmap()以设定的时间间隔将缓冲的图像复制到屏幕,以防翻转图像瓶颈。结果仍然是一样的,所以我希望你帮忙。
本练习的目的是用来自眼动仪的位置数据取代随机游走,帧速率为1000赫兹,我希望能够尽可能接近实时地显示轨迹(显示器的帧速率为120Hz)。
这是我的代码(大部分来自here):
3779 * 0.054 = 95.9866
3780 * 0.054 = 96.012
答案 0 :(得分:0)
这是我提出的解决方案。我没有使用dc.DrawBitmap()将缓冲的图像复制到屏幕,而是使用Update()和Refresh()来触发绘制事件。但是,我仍然不明白为什么我不能使用DrawBitmap()来实现同样的目标。
唯一的区别是OnPaint()使用PaintDC(),而在OnClick()中我使用ClientDC()。
无论如何,这是我当前的OnClick()代码:
def OnClick(self,event):
pos = event.GetPosition()
x = pos.x
y = pos.y
time_start = time.time()
memdc = wx.MemoryDC()
memdc.SelectObject(self.BufferBmp)
dcwi, dche = memdc.GetSizeTuple()
memdc.SetPen(wx.Pen(wx.BLACK,1,wx.SOLID))
runtime = 10
while (time.time() - time_start) < runtime:
x,y = random_walk(x,y,dcwi,dche)
memdc.SelectObject(self.BufferBmp)
memdc.DrawPoint(x,y)
memdc.SelectObject(wx.NullBitmap)
self.Update()
self.Refresh()
print jmtime() + 'Random walk in MyDrawingArea done'