Изображение не отображается после перехода с PySide на PyQt5

Я перешел с 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 для подтверждения.

Есть ли способ, чтобы изображение снова отображалось?


person hschokker    schedule 30.11.2017    source источник
comment
@hshokker .... какие модули вы импортируете из pyqt5?   -  person ZF007    schedule 30.11.2017
comment
@ ZF007 ZF007 Я делаю следующий импорт: из PyQt5 импортирую QtCore, QtGui, QtWidgets Кроме того, последняя строка в моем коде выше дает мне ошибку с PyQt5, мне нужно удалить None, self.scene, чтобы он работал . Но тогда изображение не отображается на self.scene, я полагаю.   -  person hschokker    schedule 04.12.2017


Ответы (2)


Я нашел решение вместо этого (работал с 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) 

И он отображает изображение в моем QGraphicsScene с PyQt5.

person hschokker    schedule 04.12.2017

В вашем случае вам не хватает кодовых строк ниже для отображения изображения на этикетке:

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 Марка Саммерса (обновленный стиль pyqt5) для изучения (читай: каркасная структура графического интерфейса apyqt5) и применения приведенного выше кода метки. Наслаждаться.

#!/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_())
person ZF007    schedule 30.11.2017