Python Forum
[PyQt] Cannot Display Image after Selecting Image
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyQt] Cannot Display Image after Selecting Image
#1
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.
Reply
#2
What is your OS and what Image type you want to load?
Reply
#3
(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
Reply
#4
look whats available for you

from PyQt5.QtGui import QImageReader

for image_formats in QImageReader.supportedImageFormats():
    print(image_formats.data().decode())
Reply
#5
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_())
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Tkinter: An image and label are not appearing. emont 7 410 Mar-21-2024, 03:00 PM
Last Post: deanhystad
  image conversion Skaperen 7 1,421 Sep-20-2023, 07:29 PM
Last Post: Skaperen
  My Background Image Is Not Appearing (Python Tkinter) HailyMary 2 3,981 Mar-14-2023, 06:13 PM
Last Post: deanhystad
  [Tkinter] Load image and show in label ko_fal 8 2,922 Oct-25-2022, 09:20 AM
Last Post: ko_fal
  [Tkinter] Image in Frame in Tabbed Widget Columbo 4 2,083 Sep-28-2022, 08:04 PM
Last Post: deanhystad
  simple tkinter question function call not opening image gr3yali3n 5 3,305 Aug-02-2022, 09:13 PM
Last Post: woooee
  [Tkinter] Tkinter don't change the image DQT 2 1,563 Jul-22-2022, 10:26 AM
Last Post: menator01
  [Tkinter] Not able to get image as background in a Toplevel window finndude 4 3,840 Jan-07-2022, 10:10 PM
Last Post: finndude
  [Tkinter] canvas image problem DPaul 4 6,269 Nov-24-2021, 07:06 AM
Last Post: DPaul
  An interactive image that allows a selection of a specific point Saksa 3 3,811 Nov-17-2021, 11:07 AM
Last Post: Saksa

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020