gpt4 book ai didi

python - PyQt 使用适当的抗锯齿调整 QMovie 的大小

转载 作者:太空宇宙 更新时间:2023-11-03 15:45:29 24 4
gpt4 key购买 nike

我创建了一个 QLabel 并将它的电影设置为带有动画 gif 的 QMovie 对象。然后在我的应用程序的 resizeEvent 中调整大小并移动标签,使其居中/适合布局。这工作正常,但电影有很多细线,在调整大小操作中完全乱码,似乎没有抗锯齿。所以要么我使用了错误的调整大小方法,要么我需要在某处正确设置抗锯齿? QMovie 或 QLabel 文档中没有任何内容建议如何执行此操作。我确实读到 QMovie 是从 QImageReader 继承的,尽管它也没有我能找到的抗锯齿属性。

编辑

我确实有点让它起作用了,但它仍然不太正确。我发现 QMovie 有一个 setScaledSize 方法,它实际上缩放底层 QImageViewer。然后我只是让标签适应它的内容,即电影。使用下面的代码,我可以通过适当的抗锯齿来调整电影的大小,但是在调整大小时它非常“跳跃”和“闪烁”,所以很明显我做的不是很“正确”。有时它也会以某种方式失去它的纵横比。仍在寻找执行此操作的正确方法...也许 QLabel 是错误的方法?

这是一个工作示例

import sys
from PyQt4 import QtGui

class MovieTest(QtGui.QDialog):
def __init__(self):
super(MovieTest, self).__init__()

layout = QtGui.QVBoxLayout()
self.setLayout(layout)

self.loading_lbl = QtGui.QLabel()
self.loading_lbl.setSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicyIgnored)
self.loading_lbl.setScaledContents(True)
layout.addWidget(self.loading_lbl)
loading_movie = QtGui.QMovie("loading-radial_loop.gif") # some gif in here
self.loading_lbl.setMovie(loading_movie)
loading_movie.start()

self.setGeometry(50,50,100,100)
self.setMinimumSize(10,10)

def resizeEvent(self, event):
rect = self.geometry()
size = min(rect.width(), rect.height())
movie = self.loading_lbl.movie()
movie.setScaledSize(QtCore.QSize(size, size))
self.loading_lbl.adjustSize()

def main():
app = QtGui.QApplication(sys.argv)
ex = MovieTest()
ex.show()
sys.exit(app.exec_())

if __name__ == "__main__":
main()

最佳答案

好的,我现在已经想通了,只需对我编辑过的帖子中的代码进行一些调整。秘诀在于保持标签与其父矩形的完整大小(在本例中为整个布局的大小),然后在标签内缩放电影。本质上,您是在内部缩放影片,而不是让它自动填充标签的内容。据我所知,这会稍微改变操作顺序并允许影片在渲染时自行缩放,而不是渲染帧然后将其缩放到标签大小。

工作代码:

import sys
from PyQt4 import QtGui, QtCore

class MovieTest(QtGui.QDialog):
def __init__(self):
super(MovieTest, self).__init__()

layout = QtGui.QVBoxLayout()
self.setLayout(layout)

self.loading_lbl = QtGui.QLabel()
self.loading_lbl.setStyleSheet('border: 1px solid red') # just for illustration
self.loading_lbl.setAlignment(QtCore.Qt.AlignCenter)
layout.addWidget(self.loading_lbl)
loading_movie = QtGui.QMovie("loading-radial_loop.gif")
self.loading_lbl.setMovie(loading_movie)
loading_movie.start()

self.setGeometry(50,50,100,100)
self.setMinimumSize(10,10)

def resizeEvent(self, event):
rect = self.geometry()
size = QtCore.QSize(min(rect.width(), rect.height()), min(rect.width(), rect.height()))

movie = self.loading_lbl.movie()
movie.setScaledSize(size)

def main():
app = QtGui.QApplication(sys.argv)
ex = MovieTest()
ex.show()
sys.exit(app.exec_())

if __name__ == "__main__":
main()

关于python - PyQt 使用适当的抗锯齿调整 QMovie 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50162090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com