从 PySide 移动到 PyQt5 后图像不显示

Posted

技术标签:

【中文标题】从 PySide 移动到 PyQt5 后图像不显示【英文标题】:Image not displaying after move from PySide to PyQt5 【发布时间】:2017-11-30 14:37:22 【问题描述】:

我从 PySide 转到 PyQt5,因为我想使用我编写的一些旧代码,而 Python 3.5 不再支持 PySide,PySide2 或 Python 3.4 也不适合我。

下面代码中的最后一行用于显示 Example.JPG。现在 PyQt5 似乎对我没有任何作用

self.scene = QtWidgets.QGraphicsScene()
self.view = QtWidgets.QGraphicsView(self.scene)
layout.addWidget(self.view, 1, 0, 1, 0)
self.view.scale(0.15,0.15)
self.view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.view.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.view.setTransformationAnchor(self.view.AnchorUnderMouse)
self.view.wheelEvent = self.scrollSelect
self.view.keyPressEvent = self.keypressed

self.fpimage = 'Example.JPG'
self.pixmap_item = QtWidgets.QGraphicsPixmapItem(QtGui.QPixmap(self.fpimage), None, self.scene)

提供一套完整的工作代码有点困难,因为我不能再使用 PySide 来确认。

有没有办法让图像再次显示?

【问题讨论】:

@hshokker....你导入了什么样的pyqt5模块? @ZF007 我正在执行以下导入: from PyQt5 import QtCore, QtGui, QtWidgets 另外,我上面代码中的最后一行给我一个 PyQt5 错误,我必须删除 ,None, self .scene 以使其运行。但是我想图像不会显示在 self.scene 上。 【参考方案1】:

我找到了解决方案,而不是这个(使用 PySide):

self.pixmap_item = QtWidgets.QGraphicsPixmapItem(QtGui.QPixmap(self.fpimage), None, self.scene) 

我现在有:

self.pixmap_item = QtWidgets.QGraphicsPixmapItem(QtGui.QPixmap(self.fpimage)) 
self.scene.addItem(self.pixmap_item) 

它正在使用 PyQt5 在我的 QGraphicsScene 中显示图片。

【讨论】:

【参考方案2】:

在您的情况下,您缺少在标签中显示图片的代码行:

pixmap = QtGui.QPixmap(self.mainwindow_image).scaled(main_width, main_height, aspectRatioMode = 1)

self.label = QtWidgets.QLabel(self.widget_1)
self.label.setMinimumSize(QtCore.QSize(225, 200))
self.label.setMaximumSize(QtCore.QSize(225, 200))
self.label.setText("")
self.label.setObjectName("label")

self.label.setPixmap(pixmap)

由于您的代码不完整,我为您添加了 Qt 设计师 Mark Summers 计算的示例(更新了 pyqt5 样式),以供您学习(阅读:apyqt5 gui 的骨架结构)并应用上述标签代码。享受吧。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, os
from math import *
from PyQt5 import *
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QAction, QApplication, QDialog, QLineEdit, QTextBrowser, QVBoxLayout, QWidget
#from PyQt5.QtGui import 

class Form(QDialog):

    def __init__(self, parent = None):
        super(Form, self).__init__(parent)

        self.browser  = QTextBrowser()
        self.lineedit = QLineEdit("Lots of text here... type something and press Enter")

        self.lineedit.selectAll()

        layout = QVBoxLayout()
        layout.addWidget(self.browser)
    layout.addWidget(self.lineedit)

        # starts at the lineEdit for the user to type straight away.
        self.setLayout(layout)
        self.lineedit.setFocus()

        self.lineedit.returnPressed.connect(self.updateUi)

        self.setWindowTitle("Calculate the shit out of your CPU")

    def updateUi(self):
        try:
            text = unicode(self.lineedit.text())
            self.browser.append("%s = <b>%s<b/>" % (text, eval(text)))
        except:
            self.browser.append("<font color=red> %s is invalid!</font>" % text)
        pass

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Form()
    window.show()
    sys.exit(app.exec_())

【讨论】:

以上是关于从 PySide 移动到 PyQt5 后图像不显示的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyQt5 / PySide2 中从一个类访问属性到另一个类

了解不一致的 cythonized 代码行为 - PyQt5 与 PySide2

pyqt5实现按键后切换显示图片,我会显示单张图像但不知道,多张图像怎么搞?

将图像从 MySQL 获取到 PyQt5 中的 tableWidget

matplotlib 不导入 PyQt4、PyQt5 或 PySide

PySide/PyQt5 QSettings 未保存到 HKEY_LOCAL_MACHINE