在 PyQt 中调整视频大小

Resize video in PyQt

我正在使用 PyQt 和 OpenCV 构建视频播放器。使用一个单独的线程,我用 OpenCV 读取了一个视频文件,然后将它发送到 DisplayFrame class,它使用 paint 事件来显示每一帧。

我的问题是如何使视频像 VLC Player 一样调整大小?如果播放器 window 过宽或过高并调整播放器大小 window 并保持视频比例不变,则在视频周围呈现黑色空白 space?

Class用于显示帧数:

class DisplayFrame(QWidget):
    def __init__(self, parent=None):
        super(DisplayFrame, self).__init__(parent)
        self.image = QImage()
        self.setAttribute(Qt.WA_OpaquePaintEvent)

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawImage(0, 0, self.image)
        self.image = QImage()

    @pyqtSlot(QImage)
    def set_image(self, image):
        self.image = image
        self.update()

您必须将图像的大小调整为 window 的大小。为此,您必须更改:

painter.drawImage(0, 0, self.image)

至:

painter.drawImage(self.rect(), self.image)