Ajout du multiprocessing pour que l'IHM ne freez pas
This commit is contained in:
parent
602ead50a9
commit
b9beb304e6
@ -1,11 +1,17 @@
|
|||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
import tkinter.ttk as ttk
|
import tkinter.ttk as ttk
|
||||||
import tkinter.filedialog as tkfiledialog
|
import tkinter.filedialog as tkfiledialog
|
||||||
|
from multiprocessing import Process, Pipe
|
||||||
|
|
||||||
from trouver_decedes import trouver_decedes
|
from trouver_decedes import trouver_decedes
|
||||||
|
|
||||||
class MainApplication(tk.Frame):
|
class MainApplication(tk.Frame):
|
||||||
def __init__(self, parent, *args, **kwargs):
|
def __init__(self, parent, *args, **kwargs):
|
||||||
|
# Worker
|
||||||
|
self.run = False
|
||||||
|
self.pipe = None
|
||||||
|
|
||||||
|
# GUI
|
||||||
tk.Frame.__init__(self, parent, *args, **kwargs)
|
tk.Frame.__init__(self, parent, *args, **kwargs)
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.frame = tk.Frame(parent)
|
self.frame = tk.Frame(parent)
|
||||||
@ -54,22 +60,63 @@ class MainApplication(tk.Frame):
|
|||||||
def command_button_dir_out(self):
|
def command_button_dir_out(self):
|
||||||
self.value_dir_out.set(tkfiledialog.askdirectory(title="Répertoire de sortie"))
|
self.value_dir_out.set(tkfiledialog.askdirectory(title="Répertoire de sortie"))
|
||||||
|
|
||||||
def tracker(self, step=None, text=None, set_max=None):
|
def add_log(self, text):
|
||||||
if step:
|
|
||||||
self.progressbar.step(step)
|
|
||||||
elif text:
|
|
||||||
print(text)
|
|
||||||
self.text_log.configure(state='normal')
|
self.text_log.configure(state='normal')
|
||||||
self.text_log.insert(tk.END, text)
|
self.text_log.insert(tk.END, text)
|
||||||
self.text_log.configure(state='disabled')
|
self.text_log.configure(state='disabled')
|
||||||
elif set_max:
|
|
||||||
self.progressbar['maximum'] = set_max
|
def watch(self):
|
||||||
|
if self.run:
|
||||||
|
if self.pipe.poll():
|
||||||
|
message = self.pipe.recv()
|
||||||
|
if message.get('step', False):
|
||||||
|
self.progressbar.step(message['step'])
|
||||||
|
elif message.get('text', False):
|
||||||
|
print(message['text'])
|
||||||
|
self.add_log(message['text'])
|
||||||
|
elif message.get('running', False):
|
||||||
|
self.run = message['running']
|
||||||
|
elif message.get('set_max', False):
|
||||||
|
self.progressbar['maximum'] = message['set_max']
|
||||||
|
self.parent.after(100, self.watch)
|
||||||
|
else:
|
||||||
|
print("Recherche terminée")
|
||||||
|
self.add_log("\nRecherche terminée\n")
|
||||||
|
self.button_valid.configure(state='normal')
|
||||||
|
|
||||||
def command_button_valid(self):
|
def command_button_valid(self):
|
||||||
trouver_decedes(chemin_base_donnees=self.value_bdd_insee.get(),
|
self.button_valid.configure(state='disabled')
|
||||||
chemin_repertoire_sortie=self.value_dir_out.get(),
|
self.run = True
|
||||||
numeros_unites=self.value_units.get().split(','),
|
(conn1, conn2) = Pipe()
|
||||||
|
self.pipe = conn1
|
||||||
|
Worker(conn2, self.value_bdd_insee.get(), self.value_dir_out.get(), self.value_units.get().split(',')).start()
|
||||||
|
self.watch()
|
||||||
|
|
||||||
|
|
||||||
|
class Worker(Process):
|
||||||
|
def __init__(self, pipe, bdd_insee, dir_out, units):
|
||||||
|
Process.__init__(self)
|
||||||
|
self.pipe = pipe
|
||||||
|
self.bdd_insee = bdd_insee
|
||||||
|
self.dir_out = dir_out
|
||||||
|
self.units = units
|
||||||
|
|
||||||
|
def tracker(self, step=None, text=None, set_max=None, running=None):
|
||||||
|
if step:
|
||||||
|
self.pipe.send({'step': step})
|
||||||
|
elif text:
|
||||||
|
self.pipe.send({'text': text})
|
||||||
|
elif set_max:
|
||||||
|
self.pipe.send({'set_max': set_max})
|
||||||
|
elif done:
|
||||||
|
self.pipe.send({'running': running})
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
trouver_decedes(chemin_base_donnees=self.bdd_insee,
|
||||||
|
chemin_repertoire_sortie=self.dir_out,
|
||||||
|
numeros_unites=self.units,
|
||||||
tracker=self.tracker)
|
tracker=self.tracker)
|
||||||
|
self.pipe.send({'running': False})
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
Loading…
Reference in New Issue
Block a user