gpt4 book ai didi

python - 使用 PySide 时如何有效地将数据从 NumPy 数组传输到 QPolygonF?

转载 作者:太空狗 更新时间:2023-10-30 01:38:19 26 4
gpt4 key购买 nike

我想在 PyQt4/PySide 应用程序中绘制带有许多控制点的折线。点坐标来自 NumPy 数组,必须放入 QPolygonF 才能使用 QPainter.drawPolyline(...) 绘制。

使用 PyQt4,这可以高效地完成,例如像这样:

import numpy as np
from PyQt4.QtGui import *

n = 3
qpoints = QPolygonF(n)
vptr = qpoints.data()
vptr.setsize(8*2*n)
aa = np.ndarray( shape=(n,2), dtype=np.float64, buffer=buffer(vptr))
aa.setflags(write=True)
aa[:,0] = np.arange(n)
aa[:,1] = np.arange(n)
for i in range(n):
print qpoints.at(i)

这行得通,因为在使用 PyQt4 时,QPolygonF.data() 会返回一些使用 Python 缓冲协议(protocol)的东西(sip.voidptr 对象)。

现在的问题是,如果我尝试使用 PySide 而不是 PyQt4 来运行上面的代码,QPolygonF.data() 只会返回一个 QPointF 对象(带有坐标QPolygonF 中的第一个点),因此是无用的。

所以我的问题是:是否有任何已知的解决方法?我如何使用 PySide 将数据放入 QPolygonF 而无需按元素插入 QPointF 对象?

最佳答案

这是使用 PySide2 将 Numpy 数组写入 QPolygonF 对象指向的内存块的有效方法: https://github.com/PierreRaybaut/PythonQwt/blob/master/qwt/plot_curve.py#L63(参见函数“array2d_to_qpolygonf”)

这与 PyQt4 或 PyQt5 一样高效。

关于python - 使用 PySide 时如何有效地将数据从 NumPy 数组传输到 QPolygonF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20119777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com