У меня есть код для создания QTabWidget из Python с использованием PyQt4. Я хочу получить анимированный 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, если смогу помочь.