Je teste une intervention graphique construite à l'aide de Pyqt et j'aimerais que la possibilité d'interagir avec l'interaction avec l'interaction avec le code Python exécuté après la démarrage de la boucle d'événement PYQT ( J'ai trouvé Cet exemple d'exécution La boucle Pyqt dans un fil mais ne veut pas faire quelque chose d'aussi non conventionnel. Existe-t-il un moyen d'obtenir la boucle de messages Pyqt pour continuer les messages de traitement tout en exécutant un code Python dans le thread principal après app.exec _ ()) code>. Une autre façon de dire que c'est que j'aimerais que l'appel à
app.exec _ code> pour revenir immédiatement comme si l'interface graphique était bruyante, suivie d'un autre code Python qui interagit avec l'interface graphique. P>
EXEC _ code> a été appelé? P>
5 Réponses :
Je l'ai eu. Je peux exécuter la ligne de test de script de test à partir du fil principal à l'aide de EXED, puis exécutez l'interface graphique à partir d'un fil de travail. P>
Pas exactement sûr de ce que vous voulez faire. Vous recherchez quelque chose comme py (appelée pycrust) pour pyqt? P>
Une option ici est d'utiliser un Par exemple: P> qtcore.qtimer.singleshot () code> appelez pour démarrer votre code Python après avoir appelé `EXEC _ () '.
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
# Setup the GUI.
gui = MyGui()
gui.showMainWindow()
# Post a call to your python code.
QtCore.QTimer.singleShot(1000, somePythonFunction)
sys.exit(app.exec_())
Le moyen le plus simple consiste à utiliser ipython: voir ipython -help code> ou le Documentation en ligne Pour plus d'options (par exemple, GTK, TK, etc.). P> P>
Notez que cela s'appuie sur la fonctionnalité Python InputHook, qui fonctionne lorsque l'interprète est inactif. Si vous, par exemple, tapez dans une boucle de longue durée dans l'interprète, la boucle d'événement QT ne fonctionnera pas.
comme une réponse facile possible, essayez de ne pas appeler app.exec _ () code> dans votre script et d'exécuter votre programme PYQT à l'aide de
python -i my_pyqt_app.py code>. >. Par exemple: P>
## My_PyQt_app.py
import sys
from PyQt5.QtWidgets import QApplication, QWidget
app = QApplication(sys.argv)
window = QWidget()
window.show()
# Don't start the event loop as you would do normally!
# app.exec_()
Pouvez-vous expliquer ce que le problème consiste à exécuter la boucle PYQT ou à votre propre code supplémentaire dans un deuxième fil? Comment seriez-vous capable d'exécuter deux chemins de code simultanément sans i> deux threads?
Je peux planifier des tests dans un deuxième fil, mais certains des tests impliquent la logique et sont plus qu'une seule fonction ou un objet. Existe-t-il un moyen de passer un bloc de code Python à une QThread et de faire exécuter le code QTthread dans le cadre de la course?
Il semble que je ne peux pas utiliser ExecFile depuis un QThread.