首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ndarray的QIcon

使用ndarray的QIcon
EN

Stack Overflow用户
提问于 2022-05-08 20:46:08
回答 1查看 36关注 0票数 0

在使用PyQt5的某些接口中,将button设为QPushButton。如果我们想使用给定的保存图像image.jpg为按钮设置图标,我们通常会编写:

button.setIcon(QtGui.QIcon("image.jpg"))

但是,如果给我一个n维的numpy数组array,它也代表一个图像,我不能简单地编写button.setIcon(QtGui.QIcon(array)),因为它会给出错误消息。我该怎么做呢?(不考虑将数组保存为图像,因为我希望将大量数组放入PushButton中)

编辑:

对于典型情况,请考虑:

代码语言:javascript
复制
import numpy

array = numpy.random.rand(100,100,3) * 255

然后,array是一个表示图像的方形数组。要看到这一点,我们可以编写(我们不需要使用PILImage来解决我们的问题,这只是一个演示):

代码语言:javascript
复制
from PIL import Image
im = Image.fromarray(imarray.astype('uint8')).convert('RGBA')

参考资料:100x100 image with random pixel colour

我想让这个固定的数组成为一个图标。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-08 22:35:52

您必须构建一个QImage -> QPixmap -> QIcon:

代码语言:javascript
复制
import numpy as np

from PyQt5.QtGui import QIcon, QImage, QPixmap
from PyQt5.QtWidgets import QApplication, QPushButton

app = QApplication([])

array = (np.random.rand(1000, 1000, 3) * 255).astype("uint8")

height, width, _ = array.shape
image = QImage(bytearray(array), width, height, QImage.Format.Format_RGB888)
# image.convertTo(QImage.Format.Format_RGB32)

button = QPushButton()
button.setIconSize(image.size())
button.setIcon(QIcon(QPixmap(image)))
button.show()

app.exec_()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72164965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档