Bonjour,
Quand une tâche lance des affichages dans l'IHM, il est courant que tout s'affiche d'un seul coup à la fin, ce qui n'est pas très beau ni très efficace.
Si c'est le problème, on peut ajouter après chaque instruction d'affichage l'instruction suivante:
QtCore.QCoreApplication.processEvents()
Ce qui va demander à l'IHM d'exécuter les évènements en attente.
Si la tâche est tellement longue que l'IHM est gelé, on peut la placer dans un QThread. Celui-ci émettra les instructions d'affichage comme arguments de messages (emit) pour affichage dans l'IHM (le thread ne doit pas toucher directement au graphique: il ne peut que lui envoyer des messages). C'est d'ailleurs cet envoi de messages qui me fait préférer QThread à threading. Mais bien sûr, l'intégration dans un QThread est une complexité supplémentaire, et il faut penser aussi aux possibilités de récupération lors de l'exécution d'un script buggué pour qu'il ne puisse pas planter tout le programme.
A part cela, c'est rarement raisonnable de permettre à l'utilisateur d'un programme de lancer ses propres scripts Python avec exe: tout est possible pour un utilisateur malicieux ou maladroit, y compris effacer le disque dur, envoyer des données du PC sur le web, ou placer un virus. Peut-être y a-t-il des contremesures à placer en interface (empêcher l'importation de certains modules par exemple)?
Partager