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を返しますが、スロバーが機能することもあれば、空白になることもあり、フレーム間に大きな醜い遅延が発生することもあります。特に、映画からのframeChangedシグナルを、同じ映画で単にjumpToFrameを呼び出す関数に接続するのは正しくないと思います。
さらに厄介なことに、ラムダを単にドロップすると(つまり、行を言うようにQtCore.QObject.connect(movie, QtCore.SIGNAL("frameChanged(int)"), movie.jumpToFrame
)、最初のフレームでさえレンダリングされません。
だから、私は何が間違っているのですか?
PS:.tabBar()は保護されたメンバーであることに気づきましたが、PyQtは保護されたメンバーの保護を解除すると(明らかに正しく)想定しました:)。私はQtを初めて使用するので、QTabWidgetをサブクラス化することはできません。