wxpython:如何传递XY坐标并绘制它?
我是python新手,但愿意学习。我有一套硬件来接收触摸协调员,并相应地为协调员画线 我的问题是,如果协调器发生变化,wxpython将不会画线。 这是我的密码:wxpython:如何传递XY坐标并绘制它?,python,wxpython,drawing,Python,Wxpython,Drawing,我是python新手,但愿意学习。我有一套硬件来接收触摸协调员,并相应地为协调员画线 我的问题是,如果协调器发生变化,wxpython将不会画线。 这是我的密码: 有人可以提供建议吗,谢谢。您注册了EVT_PAINT,但是您没有在数据更改时触发事件。框架不知道数据是否更改,除非您特别通知它 只需调用 frame.Refresh() 你可以用几种方法钩住它。例如,您可以将frame.Refreshbound方法作为参数传递给MainProcess,以便它可以调用函数来刷新帧。如下所示: 警告:错误
有人可以提供建议吗,谢谢。您注册了
EVT_PAINT
,但是您没有在数据更改时触发事件。框架不知道数据是否更改,除非您特别通知它
只需调用
frame.Refresh()
你可以用几种方法钩住它。例如,您可以将frame.Refresh
bound方法作为参数传递给MainProcess
,以便它可以调用函数来刷新帧。如下所示:
警告:错误代码段
编辑:
上述代码段直接调用UI方法是错误的强>
工作线程不应该直接操作GUI,相反,它应该将更改通知GUI线程,并且作为主线程的GUI线程将在其上下文中处理该更改。这里还有几种方法,最快的实现方法是通过
您可以按如下方式合并,而不是直接调用函数:
wx.CallAfter(刷新\u回调)
处理工作线程和GUI线程之间通信的另一种方法是通过
然后,无论何时新数据到达,都可以从辅助线程安全地调用frame.notify()
有关涉及
wx.CallAfter
的更优雅的解决方案,请参阅使用pubsub
的位置。谢谢。它起作用了。但是直线不是连续的,一条直线只能连接两点。我试图标记dc.Clear(),但仍然不起作用。请参考我的修订代码,它出现了屏幕闪烁问题,它显示了行的所有轨迹并消失(不确定是否由dc.Clear()引起),并显示了下一帧行的所有轨迹。谢谢。你说有几种方法可以勾住它。你能详细说明其他方法吗?关键词很好,示例更好。很抱歉,我完全忽略了一点,即您不应该直接从辅助线程调用gui方法。我正在编辑最后一部分,并给出了gui线程和数据采集线程之间通信的适当示例。
# Start a socket server
def MainProcess(refresh_callback):
while True:
refresh_callback()
***********************************************
frame = DrawPanel()
frame.Show()
start_new_thread(MainProcess, (frame.Refresh,))
class DrawPanel(wx.Frame):
"""Draw a line to a panel."""
def notify(self):
wx.PostEvent(self, wx.PaintEvent())