使用PyQT在Python中将二维整数数组重写为位图

1 投票
2 回答
1322 浏览
提问于 2025-04-16 18:54

我想用PyQt把一组整数转换成某种“图片”(我决定用Qt来做我的应用)。我有这样的数组:

Array = [
[0,0,1,0,0],
[0,1,0,1,0],
[1,0,0,0,1],
[0,1,0,1,0],
[0,0,1,0,0]]

现在我想把它转换成图片,把每个整数替换成比如说10x10像素的方块。我已经为数组中的每个值定义了RGB颜色。此外,这个项目是某种生命游戏,所以它必须在每一步都刷新,而且不能太慢。也许可以用类似OpenCV的东西?

提前谢谢你!

祝好,
Mateusz

2 个回答

1

你可以很简单地使用 QGraphicsSceneQGraphicsView 来实现上面的功能。为了获得更好的性能,你需要在你的 QGraphicsView 实例上调用 setViewport(QGLWidget())。你可以创建一个 QGraphicsItem 的子类来表示你数组中的一个元素。这样的话,如果你想的话,还可以对这些变化进行动画处理。

如果你想要动画效果,或者在演示一些进程,比如康威的生命游戏,你可能还想看看 QTimeLine

你可以在 PyQt* 或者 PySide 网站上查找相应的 Python 文档。PyQt 和 PySide 的 API 几乎是一样的,所以大多数情况下你可以互换使用它们。

*注意:在写这段话的时候,PyQt 网站无法访问

1

你可能应该使用QT的图形库来提高性能。还有一种可能更简单的方法,就是使用PIL(Python图像库)或者一些与ImageMagick或MagickWand库相关的Python绑定(我还没找到一个好的、最新的)。然后可以用NumPy的数组来进行计算和处理,再通过PyGame、QT或其他图形用户界面工具包在一个表面或画布上绘图。

在PIL中,有一个叫PIL.Image.fromarray(np_array, 'RGBA')的功能,它可以读取合适的NumPy数组——数据类型通常需要是dtype=int8,形状是(高度, 宽度, 通道数)

如果你想了解一种非常简单的图形格式,使用的是ascii字节值,可以看看NetPBM

撰写回答