У меня есть код, создающий QTabWidget из Python с использованием PyQt4. Я хочу получить на вкладке анимированный gif «throbber». /Единственный способ/, который я нашел, - это следующий запутанный метод.
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, если я могу помочь.