Czytam obraz z mojego aparatu jako tablicę numpy. Moim celem jest umieszczenie go w Qwidget z pyqt5 i wydrukowanie na moim głównym programie gui, ale otrzymuję następujący błąd:
TypeError: QPixmap(): argument 1 has unexpected type "numpy.ndarray"
Oto kod:
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from epics import PV
import numpy as np
class PanoramicGUI:
def __init__(self):
self.MainWindow = uic.loadUi("panoramicGUI.ui")
self.MainWindow.SavePositionButton. clicked.connect(self.save_image)
def save_image(self):
detectorData = PV("CAMERA:DATA")
self.data = detectorData.get()
self.data = np.array(self.data).reshape(2048,2048).astype(np.int32)
print(self.data)
img = PrintImage(QPixmap(self.data))
self.MainWindow.WidgetHV1X1.setLayout(QtWidgets.QVBoxLayout())
self.MainWindow.WidgetHV1X1.layout().addWidget(img)
class PrintImage(QWidget):
def __init__(self, pixmap, parent=None):
QWidget.__init__(self, parent=parent)
self.pixmap = pixmap
def paintEvent(self, event):
painter = QPainter(self)
painter.drawPixmap(self.rect(), self.pixmap)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
panoramic = PanoramicGUI()
panoramic.MainWindow.show()
app.exec_()
Czy ktoś może mi pomóc?
Pozdrowienia,
Gabriel.
Odpowiedzi:
1 dla odpowiedzi № 1Istnieje wiele sposobów na to.
Jedną z opcji jest załadowanie obrazu bezpośrednio z dysku poprzez podanie ścieżki do pliku. Tak byś miał img = PrintImage(QPixmap(FILE_PATH))
gdzie FILE_PATH
to jakiś ciąg znaków zamiast tablicy numpy. Aby uzyskać pełniejszy przykład, zobacz poniższy link: https://www.tutorialspoint.com/pyqt/pyqt_qpixmap_class.htm
Jeśli naprawdę chcesz go obsłużyć tablicą numpy, musisz utworzyć QtGui.QImage()
obiekt pierwszy i przekaż go do swojego QtGui.QPixmap()
obiekt zamiast tablicy numpy bezpośrednio. Zgodnie z dokumentacją QtGui.QImage()
, musisz ustawić format danych, jeśli nie jest już w rozpoznanym formacie przez QtGui.QImage()
. Tak więc powinny działać:
#Initialze QtGui.QImage() with arguments data, height, width, and QImage.Format
self.data = np.array(self.data).reshape(2048,2048).astype(np.int32)
qimage = QtGui.QImage(self.data, self.data.shape[0],self.data.shape[1],QtGui.QImage.Format_RGB32)
img = PrintImage(QPixmap(qimage))
Ostatni argument za QtGui.QImage()
można zmienić na dowolne żądane spośród listy z dokumentacji tutaj http://srinikom.github.io/pyside-docs/PySide/QtGui/QImage.html#PySide.QtGui.PySide.QtGui.QImage.Format
To ostatnie łącze jest naprawdę dobre dla wszystkich rzeczy QtGui
związane z.