salut à tous
je suis en train d'essayer de programmer un petit aspirateur de site qui a surtout pour fonction de récupérer tous les PDF d'un site de doc.
l'aspirateur marche très bien.
Et puis j'ai voulu lui mettre une interface autre que la console et j'en ai profité pour me mettre à wxPython.
Mon problème, c'est que la fenêtre ne s'affichait qu'une fois l'aspiration terminée.
Je me suis donc dit qu'en mettant l'aspirateur en Thread, ça devrait marcher. Voilà les parties de mon code concernées :
Interface :
et le début de l'aspirateur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 class Interface(wx.Frame) : def __init__(self, parent, id, title) : wx.Frame.__init__(self, parent, id, title, style = wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX, size = (406, 500)) panel = wx.Panel(self, -1) font = wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD) self.titre = wx.StaticText(panel, -1, u'Aspirateur', (125, 15)) self.titre.SetFont(font) wx.StaticLine(panel, -1, pos = (10, 40), size = (380, 1)) message = 'Récupération des PDF\n\n' wx.StaticText(panel, -1, message, pos = (10, 55)) wx.StaticLine(panel, -1, pos = (10, 110), size = (380, 1)) self.affichage = wx.TextCtrl(panel, -1, pos = (0, 120), size = (400, 250), style=wx.TE_MULTILINE) self.barreProgression = wx.Gauge(panel, -1, 100, pos = (10, 380), size = (380, 20)) self.boutonQuitter = wx.Button(panel, wx.ID_EXIT, 'OK', pos = (165, 410), size = (70, 30)) self.barreStatut = self.CreateStatusBar() self.Bind(wx.EVT_BUTTON, self.OnQuit, id = wx.ID_EXIT) self.Centre() # centrage dans l'écran self.Show() # affichage de la fenêtre self.aspi = Aspirateur(self.barreProgression, self.affichage) self.aspi.start()
Or malgrès cela, ma fenêtre ne s'affiche correctement qu'à la fin de l'exécution de l'aspirateur. Pendant l'exécution, je n'ai que la progress bar et le TextCtrl.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 class Aspirateur(Thread) : def __init__(self, progressBar, zoneTexte) : Thread.__init__(self) self.progressBar = progressBar self.zoneTexte = zoneTexte parametres = initialiseParam() self.indexMemorial = parametres[0] self.dossierTelechargement = parametres[1] self.motifLien = parametres[2] self.motifRepNom = parametres[3] self.motifLienAnnee = parametres[4] self.motifLienCompile = re.compile(self.motifLien) self.motifRepNomCompile = re.compile(self.motifRepNom) self.motifLienAnneeCompile = re.compile(self.motifLienAnnee) self.zoneTexte.SetValue(u'Début du traitement\n\n') self.lancement()
De plus, dans l'aspirateur, une fois le fichier PDF téléchargé, je souhaite le convertir en texte. J'ai un petit logiciel qui me fait ça bien (pdf2txt) mais je ne sais pas le lancer autrement qu'avec un os.system. Or, dés que je le lance, mon affichage freeze totalement. Il s'agit pourtant d'une partie du code dans mon thread d'aspirateur, pas dans la fenêtre wx.
Ne connaissant ni wx, ni les threads avant de m'attaquer à ce programme, je ne sais pas du tout ce qui se passe. Est-ce que quelqu'un a déjà eu ce problème ou simplement sait d'où cela vient ?
Merci de votre aide.
Partager