如何在 PySide2 中显示图像?

Posted

技术标签:

【中文标题】如何在 PySide2 中显示图像?【英文标题】:How to display images in PySide2? 【发布时间】:2019-12-15 17:36:48 【问题描述】:

我正在尝试使用 QLabel 在 pyside2 中显示图像。我正在将 Qpixmap 与 QLable 一起使用,在这里我遇到了一些问题,我使用它的方法仅适用于少数 .png 图像,并且对于具有 .jpg、.jpeg 和 .png 图像的其余图像也显示此错误QPixmap::scaled: Pixmap is a null pixmap

这是我正在尝试的代码

import sys
from PySide2 import QtGui, QtCore
from PySide2.QtWidgets import QFileDialog,QLabel,QAction,QMainWindow,QApplication

class Window(QMainWindow):
    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(100, 100, 500, 300)
        self.setWindowTitle("PyQT Show Image")

        openFile = QAction("&File", self)
        openFile.setShortcut("Ctrl+O")
        openFile.setStatusTip("Open File")
        openFile.triggered.connect(self.file_open)

        self.statusBar()

        mainMenu = self.menuBar()

        fileMenu = mainMenu.addMenu('&File')
        fileMenu.addAction(openFile)

        self.lbl = QLabel(self)
        self.setCentralWidget(self.lbl)

        self.home()

    def home(self):
        self.show()

    def file_open(self):
        name = QFileDialog.getOpenFileName(self, 'Open File')
        #print(name)
        self.image = QtGui.QImage(name[0])
        pixmap = QtGui.QPixmap(self.image)
        self.lbl.setPixmap(pixmap.scaled(self.lbl.size() , QtCore.Qt.KeepAspectRatio , QtCore.Qt.SmoothTransformation))


def run():
    app = QApplication(sys.argv)
    GUI = Window()
    sys.exit(app.exec_())

run()

【问题讨论】:

试试:def file_open(self):name, _ = QFileDialog.getOpenFileName(self, "Open File")if name:pixmap = QtGui.QPixmap(name)self.lbl.setPixmap( pixmap.scaled( self.lbl.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation, ) ) @eyllanesc 问题未解决 【参考方案1】:

我已经在上面测试了您的代码,并且可以正常工作。您收到的错误消息表明两个可能的错误:图像的路径和图像本身(可能已损坏)。这个错误也在这个post中讨论。

由于您提供的代码有效,我无法重现您的错误。

【讨论】:

以上是关于如何在 PySide2 中显示图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PySide2 在 matplotlib 中显示图形?

如何使用 pyside2 在 Qtableview 中显示(和格式化)日期时间数据

如何在 PySide2 中正确使用 CSS

如何在 PySide2 中添加边框或设置透明 QLayout?

pySide2和pyQt如何把界面置顶,放在最前面显示。

在 PyQtGraph 和 PySide2 中使用 ImageView 修复文本位置