![]() |
[PyQt] Cannot Display Image after Selecting Image - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: GUI (https://python-forum.io/forum-10.html) +--- Thread: [PyQt] Cannot Display Image after Selecting Image (/thread-37452.html) |
Cannot Display Image after Selecting Image - bintangkecil - Jun-11-2022 Hello, I'm trying to figure out how to display image in label. I design the GUI with Qt Designer and work with PyQt5. Right now I have defined the function to browse image with QFileDialog and display the image using QPixmap. The function can be seen as follows: def browseimages(self): fname=QFileDialog.getOpenFileNames(self, 'Select Images', '', 'Image files (*.png *.jpg *.jpeg)') imagePath = fname[0] pixmap = QPixmap(imagePath) self.label.setPixmap(QPixmap(pixmap))However, I always receive the following error in terminal after selecting the image: Quote:QImage::QImage(), XPM is not supported So, I'm wondering what's wrong and how do I get those images to display on the label Any help is much appreciated. Thanks in advance. RE: Cannot Display Image after Selecting Image - Axel_Erfurt - Jun-11-2022 What is your OS and what Image type you want to load? RE: Cannot Display Image after Selecting Image - bintangkecil - Jun-12-2022 (Jun-11-2022, 11:48 AM)Axel_Erfurt Wrote: What is your OS and what Image type you want to load? I use Windows 11, and want to load PNG file RE: Cannot Display Image after Selecting Image - Axel_Erfurt - Jun-12-2022 look whats available for you from PyQt5.QtGui import QImageReader for image_formats in QImageReader.supportedImageFormats(): print(image_formats.data().decode()) RE: Cannot Display Image after Selecting Image - Axel_Erfurt - Jun-12-2022 You can test that too. from PyQt5.QtCore import QDir from PyQt5.QtGui import QImage, QPalette, QPixmap from PyQt5.QtWidgets import (QAction, QApplication, QFileDialog, QLabel, QMainWindow, QMenu, QMessageBox, QScrollArea, QSizePolicy) class ImageViewer(QMainWindow): def __init__(self): super(ImageViewer, self).__init__() self.myimage = QImage() self.filename = "" self.scaleFactor = 1.778 self.imageLabel = QLabel() self.imageLabel.setBackgroundRole(QPalette.Base) mp = QSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.imageLabel.setSizePolicy(mp) self.imageLabel.setScaledContents(True) self.scrollArea = QScrollArea() self.scrollArea.setBackgroundRole(QPalette.Shadow) self.scrollArea.setWidget(self.imageLabel) self.setCentralWidget(self.imageLabel) self.createActions() self.createMenus() self.statusBar().showMessage("Welcome to Image Viewer") self.setWindowTitle("Image Viewer") w = 400 h = int(400 / self.scaleFactor) self.resize(w, h) self.move(0, 0) def resizeEvent(self, event): if not self.myimage.isNull(): self.updateView() def updateView(self): if self.scaleFactor < 1: self.imageLabel.resize(self.height() * self.scaleFactor, self.height()) else: self.imageLabel.resize(self.width(), round(self.width() / self.scaleFactor)) self.statusBar().showMessage(str(self.width()) + "x" + str(self.height())) self.resize(self.imageLabel.width(), self.imageLabel.height()) def open(self): fileName, _ = QFileDialog.getOpenFileName(self, "Open File", QDir.homePath(), "Images (*.png *.xpm *.jpg *.bmp *.pdf)") if fileName: self.filename = fileName self.loadFile(self.filename) def loadFile(self, fileName): if self.filename: self.myimage = QImage(self.filename) if self.myimage.isNull(): QMessageBox.information(self, "Image Viewer", "Cannot load %s." % self.filename) return self.imageLabel.setPixmap(QPixmap.fromImage(self.myimage)) self.scaleFactor = int(self.myimage.width()) / int(self.myimage.height()) f = round(self.scaleFactor, 3) self.statusBar().showMessage("Scale Factor: " + str(f), 3000) if self.scaleFactor < 1: self.resize(600 * self.scaleFactor, 600) else: self.resize(600, round(600 / self.scaleFactor)) def saveImage(self): if not self.myimage.isNull(): fileName, _ = QFileDialog.getSaveFileName(self, "Save as PNG", self.filename.replace(".jpg", ".png"), "Images (*.png)") if fileName: self.myimage.save(fileName, "PNG"); # write PNG def saveImageJPEG(self): if not self.myimage.isNull(): fileName, _ = QFileDialog.getSaveFileName(self, "Save as JPG", self.filename.replace(".png", ".jpg"), "Images (*.jpg)") if fileName: self.myimage.save(fileName, "JPG"); # write JPG def createActions(self): self.openAct = QAction("&Open...", self, shortcut="Ctrl+O", triggered=self.open) self.saveAct = QAction("Save as PNG", self, shortcut="Ctrl+S", triggered=self.saveImage) self.saveAct2 = QAction("Save as JPG", self, shortcut="Ctrl+Shift+S", triggered=self.saveImageJPEG) self.exitAct = QAction("E&xit", self, shortcut="Ctrl+Q", triggered=self.close) def createMenus(self): self.fileMenu = QMenu("&File", self) self.fileMenu.addAction(self.openAct) self.fileMenu.addAction(self.saveAct) self.fileMenu.addAction(self.saveAct2) self.fileMenu.addSeparator() self.fileMenu.addAction(self.exitAct) self.menuBar().addMenu(self.fileMenu) if __name__ == '__main__': import sys app = QApplication(sys.argv) imageViewer = ImageViewer() imageViewer.show() if len(sys.argv) > 1: print(sys.argv[1]) imageViewer.filename = sys.argv[1] imageViewer.loadFile(imageViewer.filename) sys.exit(app.exec_()) |