J'ai du code créant un QTabWidget à partir de Python en utilisant PyQt4. Je veux obtenir un gif animé "throbber" dans l'onglet. La seule manière/J'ai trouvé comment faire ceci est la méthode compliquée suivante.En utilisant PyQt et Qt4, est-ce la bonne façon d'obtenir un throbber dans un onglet QTabWidget?
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)
L'appel de débogage retourne toujours vrai, mais le throbber fonctionne parfois, est parfois vide, et a parfois un grand retard laid entre les images. En particulier, je ne peux m'empêcher de penser que la connexion du signal frameChanged du film à une fonction qui appelle simplement jumpToFrame sur le même film n'est pas correcte.
Encore plus pénible, si je laisse tomber simplement le lambda (c'est-à-dire, faites la ligne dire QtCore.QObject.connect(movie, QtCore.SIGNAL("frameChanged(int)"), movie.jumpToFrame
) il ne rend jamais même la première image.
Alors, qu'est-ce que je fais de mal? PS: Je réalise que .tabBar() est un membre protégé, mais j'ai supposé (apparemment correctement) que PyQt déprotège les membres protégés :). Je suis nouveau sur Qt, et je préfère ne pas sous-classer QTabWidget si je peux l'aider.
En effet, c'était aussi un problème avec les parents. L'argument self est le "parent" du widget C++ - sans cela, l'objet C++ mourra après le retour de votre méthode. Avec lui, il ne mourra que lorsque l'objet C++ «self» sera attaché aux matrices. J'ai trouvé qu'il est préférable de faire semblant de travailler en C++ pour travailler avec PyQt, et d'utiliser python pour une syntaxe plus agréable :) –