python - python 3+的缓冲函数
问题描述
我正在尝试使用 vtk_show 打开一个 vtk 窗口,但是每次执行此操作时我的 Ipython 控制台都会崩溃,显然这是因为 Ipython 无法显示外部窗口,而这正是 vtk_show 所做的。我在谷歌上搜索了一个解决方案,但它是为 python2 编写的(我使用的是 python 3.6.3)。这是我找到的解决方案:
import vtk
from IPython.display import Image
def vtk_show(renderer, width=400, height=300):
"""
Takes vtkRenderer instance and returns an IPython Image with the
rendering.
"""
renderWindow = vtk.vtkRenderWindow()
renderWindow.SetOffScreenRendering(1)
renderWindow.AddRenderer(renderer)
renderWindow.SetSize(width, height)
renderWindow.Render()
windowToImageFilter = vtk.vtkWindowToImageFilter()
windowToImageFilter.SetInput(renderWindow)
windowToImageFilter.Update()
writer = vtk.vtkPNGWriter()
writer.SetWriteToMemory(1)
writer.SetInputConnection(windowToImageFilter.GetOutputPort())
writer.Write()
data = str(buffer(writer.GetResult()))
return Image(data)
我在尝试使用buffer
python2 的内置函数时遇到错误,但由于 python3+ 上不存在此函数,所以我被卡住了。如果有人可以帮助我,我将不胜感激。提前致谢!
解决方案
至少必须在您的代码上修改这两点,以使其具有与 Python 3 相同的行为:
- Python 2 中的
buffer(...)
内置函数在 Python 3 中已被替换为memoryview(...)
:Python 缓冲区类型是做什么用的?. 将buffer
呼叫替换为memoryview
str(...)
内置函数必须替换bytes(...)
为获取bytes
对象的调用:https ://docs.python.org/2/howto/pyporting.html#text-versus-binary-data
所以该data = ...
行应该是:
data = bytes(memoryview(writer.GetResult()))
推荐阅读
- oop - 如何修复德尔福地址的访问冲突
- c++ - 函数所需的堆栈空间是否会影响 C/C++ 中的内联决策?
- python - Python:未定义名称“entry1”
- jboss - MOD_CLUSTER - 删除粘性会话
- bootstrap-4 - 引导网格如何工作。需要澄清其跨设备的使用情况
- regex - 查找熊猫的年份范围,尤其是连字符格式?
- angular - 使用 Ionic-karma-jasmine 进行测试
- elasticsearch - 聚合同义词,是否可以使用 Elasticsearch
- json - 无法在 Golang 中解析 AVRO 模式
- java - 如何解决批处理作业中的 DataAccessResourceFailureException?