wxPython——画一条线,比较慢
wxPython -- drawing a line, relatively slowly
我想画一条线,但不像通常使用 DrawLine() 时那样立即画线。我希望它快点,但要慢到你可以看出它正在被绘制。
我已经尝试测试一个 for 循环,它每次以一个像素绘制一条线,休眠时间为 0.05 秒,但它似乎直到 for 循环结束时才绘制任何一条线立即绘制所有内容。我认为这与它没有通过主循环进行绘图操作有关,所以我在绘图线上使用了 CallAfter,但也没有用。
似乎应该有一种方法可以简单地告诉 drawline 在 x 秒内绘制它,或者通过一个动画对象发送它,您可以在其中指定帧数等。不太确定去哪里看.有什么建议吗?
问题是 time.sleep(...)
也会阻止 GUI 作为 for 循环本身。 wx.Yield
通常应该发出信号 "GUI, I have halted the time-consuming process, do whatever you nned to do NOW"。但是根据经验,这基本上行不通(我还没有找到原因)。
因此,您可以使用 wx.CallLater
(Link to wxPython Phoenix docs) 而不是使用 sleep
,这类似于 wx.CallAfter
,但可以指定延迟。通过在内部 for 循环绘制的末尾调用它,线条部分绘制事件不应堆积。
您可能想要绘制一系列线条。这可能是最简单的。我可能会使用 wx.Timer。它在自己的主循环中运行。您可以将计时器设置为每隔一段时间触发一次,比如每 0.5 秒一次。当它触发时,它可以调用您的 draw 方法,该方法将绘制下一行。您可以在此处阅读有关计时器的更多信息:
我想画一条线,但不像通常使用 DrawLine() 时那样立即画线。我希望它快点,但要慢到你可以看出它正在被绘制。
我已经尝试测试一个 for 循环,它每次以一个像素绘制一条线,休眠时间为 0.05 秒,但它似乎直到 for 循环结束时才绘制任何一条线立即绘制所有内容。我认为这与它没有通过主循环进行绘图操作有关,所以我在绘图线上使用了 CallAfter,但也没有用。
似乎应该有一种方法可以简单地告诉 drawline 在 x 秒内绘制它,或者通过一个动画对象发送它,您可以在其中指定帧数等。不太确定去哪里看.有什么建议吗?
问题是 time.sleep(...)
也会阻止 GUI 作为 for 循环本身。 wx.Yield
通常应该发出信号 "GUI, I have halted the time-consuming process, do whatever you nned to do NOW"。但是根据经验,这基本上行不通(我还没有找到原因)。
因此,您可以使用 wx.CallLater
(Link to wxPython Phoenix docs) 而不是使用 sleep
,这类似于 wx.CallAfter
,但可以指定延迟。通过在内部 for 循环绘制的末尾调用它,线条部分绘制事件不应堆积。
您可能想要绘制一系列线条。这可能是最简单的。我可能会使用 wx.Timer。它在自己的主循环中运行。您可以将计时器设置为每隔一段时间触发一次,比如每 0.5 秒一次。当它触发时,它可以调用您的 draw 方法,该方法将绘制下一行。您可以在此处阅读有关计时器的更多信息: