У меня есть QMainWindow
, содержащий дочернего элемента QWidget
, содержащего себя QLabel
.
Когда окно развернуто (например, щелкнув значок максимизации в окне), обработчик QLabel.resizeEvent()
вызывается несколько раз (предположительно, чтобы следовать за постепенным увеличением окна, пока оно не займет все пространство рабочего стола).
Код в обработчике событий вызывает setPixmap()
для масштабирования растрового изображения метки.Это относительно длительная операция, которая замедляет процесс.Код для метки:
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QLabel, QFrame, QGridLayout
from PyQt5.QtGui import QImageReader, QPixmap
class DisplayArea(QLabel):
def __init__(self):
super().__init__()
self.pix_map = None
self.init_ui()
def init_ui(self):
self.setMinimumSize(1, 1)
self.setStyleSheet("border:1px solid black;")
def set_image(self, image):
self.pix_map = QPixmap.fromImage(image)
self.scale_image(self.size())
def scale_image(self, size):
if self.pix_map is None:
return
scaled = self.pix_map.scaled(size, Qt.KeepAspectRatio)
self.setPixmap(scaled)
def resizeEvent(self, e):
self.scale_image(e.size())
super().resizeEvent(e)
Есть ли возможность обработать событие только один раз, когда окно достигло своего окончательного размера?