Как загружать изображения в QLable по включению программы?

У меня есть программа, в которой есть QLable, как сделать так что бы любое изображение в формате .jpg имеющие имя скажем foto автоматически туда загружалось с определенными, размерами.

Как это реализовать?


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

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

Не уверен что правильно понимаю то, что вы хотите сделать, но предложу попробовать вариант того как я понял.

Обратите внимание, что я встроил в вашу форму свой класс ScaledLabel
и добавил QSizePolicy.

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(900, 600)                                      #(640, 480)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        
        self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.gridLayout_2.setContentsMargins(0, 0, 0, 0)                    # +++
        
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.gridLayout.setContentsMargins(0, 0, 0, 0)                      # +++
        
#        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label = ScaledLabel(self.centralwidget)                        # +++ ScaledLabel
        
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        
        self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
        
        MainWindow.setCentralWidget(self.centralwidget)
        
#        self.menubar = QtWidgets.QMenuBar(MainWindow)
#        self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 21))
#        self.menubar.setObjectName("menubar")
#        MainWindow.setMenuBar(self.menubar)
#        self.statusbar = QtWidgets.QStatusBar(MainWindow)
#        self.statusbar.setObjectName("statusbar")
#        MainWindow.setStatusBar(self.statusbar)

        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", "ИЗОБРАЖЕНИЕ НЕ ЗАГРУЖЕННО!"))


class ScaledLabel(QtWidgets.QLabel):                                      # +++ ScaledLabel
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        
        self._pixmap = self.pixmap()
        self._resised= False
    
    def resizeEvent(self, event):
        self.setPixmap(self._pixmap)     

    def setPixmap(self, pixmap): #overiding setPixmap
        if not pixmap: return 
        self._pixmap = pixmap
        return QtWidgets.QLabel.setPixmap(self,self._pixmap.scaled(
                self.frameSize(),
                QtCore.Qt.KeepAspectRatio))
                

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): 
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        sizePolicy = QtWidgets.QSizePolicy(
            QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
        self.label.setSizePolicy(sizePolicy)
        self.label.setMinimumSize(QtCore.QSize(1, 1))
        self.label.setStyleSheet("background-color: rgb(185, 185, 185);")
        self.label.setScaledContents(False)        
        self.label.setAlignment(Qt.AlignCenter)

        pixmap = QPixmap('foto.jpg')
        print(f'pixmap.size ----> {pixmap.size()}') 
        
        if pixmap.size().width():
            self.label.setPixmap(pixmap)
            
        QTimer.singleShot(1000, lambda: self.resizeMainWindow(1300, 600))

    def resizeMainWindow(self, width, height):
        self.animation = QPropertyAnimation(self, b"size")
        self.animation.setLoopCount(2)
        self.animation.setDuration(5000)
        self.animation.setKeyValueAt(0   ,QtCore.QSize(self.width()  ,self.height()  ))
        self.animation.setKeyValueAt(0.25,QtCore.QSize(self.width()/2,self.height()/2))
        self.animation.setKeyValueAt(0.5 ,QtCore.QSize(self.width()/2,self.height()  ))
        self.animation.setKeyValueAt(0.75,QtCore.QSize(self.width()  ,self.height()/2))
        self.animation.setKeyValueAt(1   ,QtCore.QSize(self.width()  ,self.height()  ))
        self.animation.setEasingCurve(QtCore.QEasingCurve.InOutSine)
        self.animation.start()
        

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

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

→ Ссылка