У меня есть окно с шестью симметрично расположенными метками, все из которых показывают изображения (разработанные с помощью qt-designer с помощью макетов).Я хотел бы изменить размеры этих изображений в соответствии с изменяющимся размером окна.Я нашел некоторую помощь в предыдущих вопросах, таких как: PyQt: обнаружение изменения размера в сигнале изменения размера окна виджета
В настоящее время использование resizeEvent () в моем случае не уменьшает изображения в соответствии сфункция изменения размера.Это уже вызвано отображением моего окна формы, что делает кнопку бесполезной.Прежде всего, результирующее выполнение очень медленное.Мои изображения имеют размер 2058x1536 и отображаются прозрачно.
Мой код qt-designer приведен здесь: https://pastebin.com/TzM6qiKZ
import Ui_ImageCrop_Test
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtGui import QPixmap, QImage, QPainter, QColor
from PyQt5.QtCore import Qt
class ImageCrop(Ui_ImageCrop_Test.Ui_MainWindow, QMainWindow):
def __init__(self, parent=None):
super(ImageCrop, self).__init__()
self.setupUi(self)
self.transparency = 220
with open("Img_files.txt") as file:
self.img_files = file.read().splitlines()
self.length = len(self.img_files)
self.pushButton_1.clicked.connect(self.click1)
self.label_1.resizeEvent = self.click1
def click1(self, event):
for i in range(6):
image = QImage(self.img_files[i])
image = image.convertToFormat(QImage.Format_ARGB8565_Premultiplied)
p = QPainter(image)
p.setCompositionMode(QPainter.CompositionMode_DestinationIn)
p.fillRect(image.rect(), QColor(0, 0, 0, self.transparency))
p.end()
pixmap = QPixmap(image)
w = int(self.label_1.width() - 4.0)
h = int(self.label_1.height() - 4.0)
smaller_pixmap = pixmap.scaled(w, h, Qt.IgnoreAspectRatio, Qt.FastTransformation)
if i == 0:
self.label_1.setPixmap(smaller_pixmap)
if i == 1:
self.label_2.setPixmap(smaller_pixmap)
if i == 2:
self.label_3.setPixmap(smaller_pixmap)
if i == 3:
self.label_4.setPixmap(smaller_pixmap)
if i == 4:
self.label_5.setPixmap(smaller_pixmap)
if i == 5:
self.label_6.setPixmap(smaller_pixmap)
def main():
app = QApplication(sys.argv)
form1 = ImageCrop()
form1.show()
app.exec_()
if __name__ == '__main__': main()
Есть ли какое-нибудь решение для более быстрого запуска этого кода?Например, я думал сделать все мои метки пустыми во время щелчка мышью на краю моего окна, а затем изображения появляются снова после отпускания кнопки мыши.Это не кажется таким аккуратным.Кроме того, я не уверен, что использование paintEvent может уменьшить мою задержку.Спасибо за ваши предложения и комментарии.