2012-09-11 2 views
1

J'essaie de modifier un programme écrit en utilisant pyQt (en particulier, Anki). Je veux que le programme clignote brièvement une image (stockée sous forme de fichier sur mon disque dur) puis continue à fonctionner normalement.Brièvement une image flash

Ce code sera inséré à un point arbitraire du programme. Il s'agit d'un correctif mono-utilisateur ad-hoc pour un programme existant - il n'a pas besoin d'être rapide, élégant ou facile à entretenir.

Mon problème est que je connais très peu de pyQt. Ai-je besoin de définir une nouvelle "fenêtre" entière, ou puis-je simplement exécuter une sorte de fonction "notification" avec une image à l'intérieur?

Répondre

4

QSplashScreen sera utile pour cela. Il est principalement utilisé pour afficher certaines images/textes pendant le chargement d'un programme, mais votre boîtier semble également idéal pour cela. Vous pouvez le fermer en cliquant dessus, ou en plus vous pouvez définir une minuterie pour le fermer automatiquement après un certain temps.

Voici un exemple simple avec un dialogue qui a un bouton. Lorsque vous appuyez dessus, l'image s'affiche et se ferme au bout de 2 secondes:

import sys 
from PyQt4 import QtGui, QtCore 

class Dialog(QtGui.QDialog): 
    def __init__(self, parent=None): 
     super(Dialog, self).__init__(parent) 

     layout = QtGui.QVBoxLayout() 
     self.setLayout(layout) 

     self.b1 = QtGui.QPushButton('flash splash') 
     self.b1.clicked.connect(self.flashSplash) 

     layout.addWidget(self.b1) 

    def flashSplash(self): 
     # Be sure to keep a reference to the SplashScreen 
     # otherwise it'll be garbage collected 
     # That's why there is 'self.' in front of the name 
     self.splash = QtGui.QSplashScreen(QtGui.QPixmap('/path/to/image.jpg')) 

     # SplashScreen will be in the center of the screen by default. 
     # You can move it to a certain place if you want. 
     # self.splash.move(10,10) 

     self.splash.show() 

     # Close the SplashScreen after 2 secs (2000 ms) 
     QtCore.QTimer.singleShot(2000, self.splash.close) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 

    main = Dialog() 
    main.show() 

    sys.exit(app.exec_()) 
+0

Merci beaucoup, c'est parfait! Je vous upvote si j'avais plus de rep. – user1616820

Questions connexes