[wxPython] Rafraichissement affichage

Rafraichissement affichage [wxPython] - Python - Programmation

Marsh Posté le 31-01-2006 à 17:37:06    

Bonjour à tous  :hello:  
 
j'avais fait un script en python me permettant d'alléger quelques taches bien répétitives. L'execution se faisant en console, et les taches devenant suffisament complexe, je me suis décider a rendre ce script plus joli ;)
 
Aussi me suis je mis a développer une interface avec boa constructor.
 
Seulement j'ai quelques soucis d'affichage.
 
j'ai notamment des copies de fichiers assez lourd à réaliser.
 
Lorsque je declanche l'action qui va executer ces multiples copies de fichier, une miniframe est censé s'afficher, et à l'interieur de cette miniframe j'utilise quelque "statictext" et wx.stc.StyledTextCtrl pour avoir un retour sur le fichier en cours de copie, en cours d'effacage ou de compression/decompression.
 
tant que les fonctions de copie/effacage/compression (executée via os.system) ne sont pas finit, la mini frame ne s'affiche pas completement  :(  
 
Elle ne s'affiche completement qu'à la fin de l'execution.
 
Il y a t il un moyen de forcer le rafraichissement de la frame entre deux executions d'une instruction?

Reply

Marsh Posté le 31-01-2006 à 17:37:06   

Reply

Marsh Posté le 31-01-2006 à 17:45:26    

Ne pas utiliser os.system (j'vois pas pourquoi tu fais ça de toute façon, ça n'a aucun intérêt et c'est pas portable), et lancer les opérations externes dans un thread/processus séparé de celui de l'interface via threading.Thread ou os.popen*.


Message édité par masklinn le 31-01-2006 à 17:46:46

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 31-01-2006 à 20:57:19    

j'ai du mal a trouver les fonctions permettant de faire des copies/deplacement de fichiers.
 
Par contre je vois pas comment faire quelque chose de portable vu que mon programme me permet aussi de faire des compression via 7z.

Reply

Marsh Posté le 31-01-2006 à 21:12:48    

Paulo les Gaz a écrit :

j'ai du mal a trouver les fonctions permettant de faire des copies/deplacement de fichiers.


[:petrus75]
 
J'pense qu'une petite consultation des modules "os" et "shutil" (surtout shutil en fait) de la lib standard pourrait t'intéresser toi, et les modules zipfile, gzip et bz2 pour la compression


Message édité par masklinn le 31-01-2006 à 21:16:41

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 31-01-2006 à 23:50:42    

je débute :sweat:
 
:D

Reply

Marsh Posté le 01-02-2006 à 15:19:22    

Malgré l'utilisation de thread et du module shutil, j'ai toujours un problème de rafraichissement comme on peu le voire sur la capture.
 
http://paulolesgaz.free.fr/temp/python/pythonrefresh.png
 
Au milieu on est censé voir défiler du texte au fur et a mesure des diverses copies, suppressions de fichiers et répertoire.
 
ET en fait tout s'affiche une fois toutes les copies/suppressions effectuées :(

Reply

Marsh Posté le 01-02-2006 à 17:01:42    

il faut creer un thread different pour les taches lourdes , si non ca freeze tout , c'est normal :)

Reply

Marsh Posté le 01-02-2006 à 21:38:19    

en fait ca freeze pas.
 
J'ai trouvé comment faire.
 
l'instruction self.Refresh() ne fonctionne pas.
 
Mais par contre self.Update() oui !
 
Donc apres une nouvelle information, je fais un self.Update(), et ma miniframe est ainsi rafraichit.
 
C'est souvent chaud de trouver les bonnes infos sur le net :sweat:
 
Mais avec de la perséverance on y arrive :D

Reply

Marsh Posté le 14-02-2006 à 10:09:48    

Bon, ca freeze quand même.
 
self.Update() me permet de mettre à jour l'affichage, mais seulement avant ou après le lancement d'une "tache".
 
Dans ma dialog box je lance une série de tache:
 
1. Effacement de fichiers et répertoire :fonction monmodule.efface() par exemple.
2. Decompression d'un gros zip : fonction monmondule.decomp()
3. demarrage mysql et traitement bdd : monmodule2.bdd()
 
Entre chaque fonction je met a jour un historique d'avancée des taches et une progress barre.
 
Seulement pendant l'execution de ces fonctions, je ne peu déplacer la dialog box, et elle n'est évidemment pas rafraichit :(.
 
Par exemple si je lance la procédure, et que pendant les 5 minute que va durer la decompression, si je change d'appli, et que je passe en premier plan thunderbird par exemple, si 30 secondes après je souhaite faire passer au premier plan mon appli en python, et ba non, pour que cela se fasse, il faut attendre la fin de la decompression.
 
J'ai bo déclarer un thread et le lancé depuis la dialog box, comme ceci:
 
decomp = threading.Thread(monmodule.decompression())
decomp.start()

 
ca ne marche pas mieux :(
 
Un petit coup de main ne serait pas de trop

Reply

Marsh Posté le 14-02-2006 à 23:05:21    

Bon, merci quand même.
 
J'ai finit par résoudre une partie de mon problème. Me reste a renseigner la dlg, via une sorte de timer, ou par des évenements.
 
Je vais tenter de me demerder encore seul.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed