wxpython:如何传递XY坐标并绘制它?

wxpython:如何传递XY坐标并绘制它?,python,wxpython,drawing,Python,Wxpython,Drawing,我是python新手,但愿意学习。我有一套硬件来接收触摸协调员,并相应地为协调员画线 我的问题是,如果协调器发生变化,wxpython将不会画线。 这是我的密码: 有人可以提供建议吗,谢谢。您注册了EVT_PAINT,但是您没有在数据更改时触发事件。框架不知道数据是否更改,除非您特别通知它 只需调用 frame.Refresh() 你可以用几种方法钩住它。例如,您可以将frame.Refreshbound方法作为参数传递给MainProcess,以便它可以调用函数来刷新帧。如下所示: 警告:错误

我是python新手,但愿意学习。我有一套硬件来接收触摸协调员,并相应地为协调员画线

我的问题是,如果协调器发生变化,wxpython将不会画线。 这是我的密码:


有人可以提供建议吗,谢谢。

您注册了
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())