문제

나는 몇 가지 코드를 만들 QTabWidget 에서 사용하는 파이썬 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 unprotects 보호된 회원:).나는 새로운 Qt,그리고 나는 오히려지 서브 클래스 QTabWidget 면 내가 그것을 할 수 있습니다.

도움이 되었습니까?

해결책

내가 믿고 문제 코드와 함께 내가 처음에 게재되었다는 QMovie 지 않았다 부모가 있고,따라서 허용되는 범위 지정 문제의 근본적인 C++문제가 될 수 있습니다.그것은 또한 가능했 실을 꿰는 문제-threading.드코드 재생되지 않습 니다.작동 코드가 나는 지금은 아래 없이 장난으로 신호는 없으며 슬롯이 필요합니다.

def animateTab(self, tab_widget, enable):
    tw = tab_widget
    tabBar = tw.tabBar()
    if enable:
        lbl = QtGui.QLabel(tw)
        movie = QtGui.QMovie("images\\throbber.gif"), parent=lbl)
        movie.setScaledSize(QtCore.QSize(16, 16))
        lbl.setMovie(movie)
        movie.start()
    else:
        lbl = QtGui.QLabel(tw)
        lbl.setMinimumSize(QtCore.QSize(16, 16))
    tabBar.setTabButton(tab_section.index, QtGui.QTabBar.LeftSide, lbl)

다른 팁

나는 같은 문제에 직면하고 이를 게시하게하는 데 도움이 작동:http://www.daniweb.com/forums/printthread.php?t=191210&pp=40

나를 위해 이들에게 차이점은:QMovie("image.gif",QByteArray(),자기)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top