VPython在与python安装一起使用时表现得很奇怪,并且不会很好地关闭



我想使用VPython构建物理模拟。虽然,VPython在像trinket这样的网站上工作得很好。我想使用一个比web更好的IDE,我想使用真正的python模块以及外部库,如numpy。

我按照https://vpython.org/presentation2018/install.html上的说明在本地安装VPython。我使用命令pip install vpython(不太喜欢conda)并编写了这个简单的演示程序:

from vpython import sphere
sphere()

当我从命令行运行这个程序时,程序确实工作了:打开了一个浏览器窗口,显示球体。但是,这个设置有几个问题:

  • 查看控制台时,它一直抛出一个奇怪的错误RuntimeError: can't register atexit after shutdown。但是,它似乎仍然运行良好。
  • 我找不到一个方法来很好地停止模拟。关闭浏览器选项卡不会退出程序。按下Ctrl+C也没有任何用处。停止它的唯一方法是使用Ctrl+Break,这是一个非常肮脏的方式,在我看来。我试图使用stop_server在该链接中记录,但没有结果。

是否有办法解决这些问题,或者可能是一个不同的环境,将满足我的需求?我真的希望能够使用内置的python模块和外部库,如numpy,但目前似乎不可能。

根据本次讨论,这是Python版本的问题。

关于vpython版本和使用的python解释器之间不匹配的讨论:

我们落后了7.6.1的构建是针对Python 3.6、3.7和3.8完成的,而不是3.9。所以如果你降级Python,它可能会起作用。布鲁斯

你是正确的,谢谢!我降级到3.8.6,它工作了。

要退出程序,需要输入exit命令停止终端。

当使用递归函数创建形状时,我得到了相同的错误。当vpython退出时,递归线程仍在运行。

你可以通过在设置好场景并绘制好图形后添加这些行来防止vpython服务器关闭,直到你退出程序:

while True:
rate(60)

这将保持与vpython服务器的连接,只要程序正在运行(while True),并将帧率设置为60fps (rate(60))

这来自于vpython文档中关于从终端运行vpython实例的注释:

从终端运行时,如果程序不以循环结束如果包含rate()语句,则需要添加"而True: rate(30)"到节目的最后。当从如Jupyter notebook、IDLE或Spyder等环境。

https://vpython.org/presentation2018/install.html

相关内容

  • 没有找到相关文章

最新更新