QIcon 使用 ndarray
QIcon Using ndarray
在使用PyQt5
的一些界面中,设button
为QPushButton。如果我们想使用给定的保存图像 image.jpg
为按钮设置图标,我们通常会这样写:
button.setIcon(QtGui.QIcon("image.jpg"))
但是,如果给我一个 n 维 numpy 数组 array
,它也表示一个图像,我不能简单地写 button.setIcon(QtGui.QIcon(array))
,因为它会给出错误消息。我应该怎么做呢? (不考虑将数组保存为图像,因为我想将大量数组制作成按钮)
编辑:
对于典型情况,请考虑:
import numpy
array = numpy.random.rand(100,100,3) * 255
那么array
就是一个代表图像的方阵。要看到这一点,我们可以写(我们不必使用 PIL
或 Image
来解决我们的问题,这只是一个演示):
from PIL import Image
im = Image.fromarray(imarray.astype('uint8')).convert('RGBA')
参考:100x100 image with random pixel colour
我想把这个固定数组做成一个图标
你必须构建一个 QImage -> QPixmap -> QIcon:
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_()
在使用PyQt5
的一些界面中,设button
为QPushButton。如果我们想使用给定的保存图像 image.jpg
为按钮设置图标,我们通常会这样写:
button.setIcon(QtGui.QIcon("image.jpg"))
但是,如果给我一个 n 维 numpy 数组 array
,它也表示一个图像,我不能简单地写 button.setIcon(QtGui.QIcon(array))
,因为它会给出错误消息。我应该怎么做呢? (不考虑将数组保存为图像,因为我想将大量数组制作成按钮)
编辑:
对于典型情况,请考虑:
import numpy
array = numpy.random.rand(100,100,3) * 255
那么array
就是一个代表图像的方阵。要看到这一点,我们可以写(我们不必使用 PIL
或 Image
来解决我们的问题,这只是一个演示):
from PIL import Image
im = Image.fromarray(imarray.astype('uint8')).convert('RGBA')
参考:100x100 image with random pixel colour
我想把这个固定数组做成一个图标
你必须构建一个 QImage -> QPixmap -> QIcon:
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_()