PYQTとQT4を使用すると、QtabWidgetタブでThrobberを入手するための適切な方法がありますか?

StackOverflow https://stackoverflow.com/questions/3301866

  •  26-09-2020
  •  | 
  •  

質問

PYQT4を使用してPythonからQtabwidgetを作成するコードがいくつかあります。タブに「Throbber」アニメーション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は時々動作することがあり、時には空白で、フレーム間に大きな遅延遅延を持ちます。特に、ムービーからのフレームチェンジ信号を単に同じムービーでJumptOframeを呼び出す関数に接続するのに役立ちません。

さらに苦痛な、私が単にラムダを落とす(つまり、ラインをQtCore.QObject.connect(movie, QtCore.SIGNAL("frameChanged(int)"), movie.jumpToFrameと言うようにする)それは最初のフレームでさえもレンダリングされることはありません。

だから、私は間違っているのですか?

PS:.tabbar()は保護されたメンバーですが、PYQTが保護されているメンバーに保護されていないことを想定しています(明らかに正しく)。私はqtに新しい、そして私がそれを助けることができるならば、qtabwidgetをサブクラスではありません。

役に立ちましたか?

解決

私が最初に投稿されたコードに関する問題は、Qmovieが親を持っていなかったこと、したがってスコープの問題は、基礎となるC ++の問題が破壊されることを可能にしました。Threading.ThreadとQthreadが一緒に素敵に遊ばないでください。私が今、私が持っている作業コードは以下のところにあります - シグナルやスロットは必要ありません。

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?= 191210とAMP; PP= 40

私のためにこれは違いをするようです:Qmovie( "image.gif"、qbytearray()、自己)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top