PyQt5, при выборе изображения вылетает ошибка 'память не может быть read'

Перешел с tkinter на PyQt5, и в качестве практики хочу создать простой редактор изображений, также используя PIL. Пока что в программе есть только Label и кнопка которая вызывает диалог выбора файла, и при выборе файла, из 7 изображений только одно отображается в Label, в других же случаях вот такая ошибка: http://mmolabel.ru/wp-content/uploads/2018/03/pamyat-ne-mozhet-byt-read.jpg

Вот код виджетов

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(70, 40, 651, 391))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(644, 560, 131, 23))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Здесь будет фото"))
        self.pushButton.setText(_translate("MainWindow", "Выберите изображение"))

Вот файл с логикой, запускать необходимо его, и из той же директории что и первый

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog
from pr_visual import Ui_MainWindow
import sys
from PIL import Image
from PIL.ImageQt import ImageQt
def opendialog():
    dialog = QFileDialog()
    fname = dialog.getOpenFileName(None, 'Open file', '/')[0]
    img = Image.open(fname)
    width = img.size[0]
    height = img.size[1]
    qimg = ImageQt(img)
    width = img.size[0]
    height = img.size[1]
    pixmap = QtGui.QPixmap.fromImage(qimg)
    ui.label.setGeometry(QtCore.QRect(0, 0, width, height))
    ui.label.setPixmap(pixmap)

#Create main window
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(window)
window.setWindowTitle('PR')
window.show()

#Logic
ui.pushButton.clicked.connect( opendialog )

#mainloop
sys.exit(app.exec_()) 

Ответы (1 шт):

Автор решения: S. Nick

Вам не нужны никакие дополнительные библиотеки.

Я предложу вам:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog

#from PIL import Image
#from PIL.ImageQt import ImageQt

#from pr_visual import Ui_MainWindow
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(70, 40, 651, 391))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(644, 560, 131, 23))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Здесь будет фото"))
        self.pushButton.setText(_translate("MainWindow", "Выберите изображение"))


def opendialog():
    dialog = QFileDialog()
    fname = dialog.getOpenFileName(None, 'Open file', '/')[0]
    if fname:
        pixmap = QtGui.QPixmap(fname).scaled(  
                    ui.label.size(), 
                    QtCore.Qt.KeepAspectRatio)
        ui.label.setPixmap(pixmap)
        ui.label.setAlignment(QtCore.Qt.AlignCenter)


#Create main window
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(window)
window.setWindowTitle('PR')
window.show()

#Logic
ui.pushButton.clicked.connect( opendialog )

#mainloop
sys.exit(app.exec_()) 

введите сюда описание изображения

→ Ссылка