You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5中QMovie显示被截断,调整大小后仍无法完整显示

问题:QMovie加载GIF显示被截断,窗口无法匹配GIF尺寸

我尝试向窗口中添加GIF,希望窗口尺寸与QMovie的尺寸完全匹配,但QMovie一开始就显示被截断,即使调整窗口大小,也无法完整显示GIF。

原代码:

from typing import Text
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg
import sys

class MainWindow(qtw.QDialog):
    
    def __init__(self, *arg, **kwargs):
        super().__init__(*arg, **kwargs)
        
        self.centralwidget = qtw.QWidget(self)
        self.centralwidget.setObjectName("centralwidget")

        self.label = qtw.QLabel(self.centralwidget)       

        movie = qtg.QMovie('mic_listen2.gif')
        movie.setScaledSize(qtc.QSize(50,50))

        self.label.setMovie(movie)
        
        movie.start()
        self.show()
    
if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    w = MainWindow()
    sys.exit(app.exec_())

问题现象:

GIF仅显示左上角部分,无法完整展示;调整窗口大小后,GIF仍被截断。


解决方案

问题核心是未使用布局管理器管理控件尺寸,且标签未适配GIF的缩放/原始尺寸,导致显示区域被限制。以下是修复步骤:

1. 使用布局管理器

布局管理器会自动处理控件的大小和位置,确保标签能完整显示GIF。

2. 让窗口自动适配内容大小

调用adjustSize()方法,让窗口根据内部控件的尺寸自动调整自身大小。

3. 适配GIF缩放尺寸(可选)

如果需要固定GIF大小,设置setScaledSize后,需同步调整标签的尺寸,确保标签能容纳缩放后的GIF。

修复后的代码:

from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg
import sys

class MainWindow(qtw.QDialog):
    
    def __init__(self, *arg, **kwargs):
        super().__init__(*arg, **kwargs)
        # 创建垂直布局,绑定到窗口
        layout = qtw.QVBoxLayout(self)
        
        self.label = qtw.QLabel()       
        movie = qtg.QMovie('mic_listen2.gif')

        # 可选:固定GIF缩放尺寸,同时设置标签固定大小以适配
        # target_size = qtc.QSize(50, 50)
        # movie.setScaledSize(target_size)
        # self.label.setFixedSize(target_size)
        
        self.label.setMovie(movie)
        # 将标签添加到布局中
        layout.addWidget(self.label)
        
        movie.start()
        # 让窗口自动调整到内容的合适尺寸
        self.adjustSize()
        self.show()
    
if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    w = MainWindow()
    sys.exit(app.exec_())

关键修改说明:

  • 移除了无用的centralwidget(QDialog本身可直接作为布局容器)
  • 添加QVBoxLayout管理标签,确保标签能根据内容自动调整大小
  • 调用self.adjustSize()让窗口自动适配标签(及GIF)的尺寸
  • 若需固定GIF大小,需同时设置标签的setFixedSize,保证标签能容纳缩放后的GIF

内容的提问来源于stack exchange,提问作者H Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:41:10