【发布时间】:2010-07-21 17:03:56
【问题描述】:
我有一些代码使用 PyQt4 从 Python 创建 QTabWidget。我想在标签中获得一个“悸动”动画 gif。 /唯一的方法/我发现如何做到这一点是以下复杂的方法。
tabBar = self.tabReports.tabBar()
lbl = QtGui.QLabel(self.tabReports)
movie = QtGui.QMovie(os.path.join(self.basedir, "images\\throbber.gif"))
lbl.setMovie(movie)
QtCore.QObject.connect(movie, QtCore.SIGNAL("frameChanged(int)"), lambda i: movie.jumpToFrame(i))
movie.start()
log.debug("valid = %s"%(movie.isValid()))
tabBar.setTabButton(idxtab, QtGui.QTabBar.LeftSide, lbl)
调试调用总是返回 true,但 throbber 有时会工作,有时是空白的,有时帧之间有很大的难看延迟。特别是,我不禁认为将电影中的 frameChanged 信号连接到在同一部电影上简单地调用 jumpToFrame 的函数是不正确的。
更令人苦恼的是,如果我简单地删除 lambda(也就是说,将行设为 QtCore.QObject.connect(movie, QtCore.SIGNAL("frameChanged(int)"), movie.jumpToFrame),它甚至不会渲染第一帧。
那么,我做错了什么?
PS:我意识到 .tabBar() 是受保护的成员,但我假设(显然是正确的)PyQt 取消保护受保护的成员:)。我是 Qt 的新手,如果我能帮上忙,我宁愿不要继承 QTabWidget。
【问题讨论】: