Как загружать изображения в 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_())
