[QST] Interface réactive et traitement long
Bonjour,
Je débute en Python et pyGTK.
Je suis habitué a faire des IHM dans d'autre langage, je connais donc le problème des traitement long dans les IHM.
J'ai donc essayé de faire un petit programme qui simule ce problème.
Voici donc le code de mon interface:
Code:
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#!/usr/bin/python
import pygtk
pygtk.require("2.0")
import gtk
import threading
import test
class Fenetre:
def __init__(self):
mainWindow = gtk.Window()
mainWindow.set_title("test")
mainWindow.resize(700,200)
mainWindow.connect("destroy", self.on_mainWindow_destroy)
mainWindow.set_position(gtk.WIN_POS_CENTER)
##########################################################
# PARTIE HAUTE #
##########################################################
self.runButton = gtk.Button("Run")
self.runButton.connect("clicked", self.on_myButton_clicked)
self.folderChooser=gtk.FileChooserButton("Choisir le dossier cible")
self.folderChooser.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
##########################################################
# PARTIE CENTRALE #
##########################################################
scrollPan = gtk.ScrolledWindow()
scrollPan.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
self.affichage=gtk.Label()
self.affichage.set_justify(gtk.JUSTIFY_LEFT)
scrollPan.add_with_viewport(self.affichage)
cadre=gtk.Frame("Log")
cadre.add(scrollPan)
##########################################################
# POSITIONNEMENT #
##########################################################
layoutPrinc=gtk.Table(10,3,True)
layoutPrinc.attach(self.folderChooser,0,2,0,1)
layoutPrinc.attach(self.runButton,2,3,0,1)
layoutPrinc.attach(cadre,0,3,1,10)
mainWindow.add(layoutPrinc)
##########################################################
mainWindow.show_all()
def on_mainWindow_destroy(self, widget):
gtk.main_quit()
def on_myButton_clicked(self, widget):
threading.Thread(target=test.run,args=(self)).start()
if __name__ == "__main__":
Fenetre()
gtk.main() |
Comme vous pouvez le voir je lance un traitement dans un thread séparer lorsque je clique sur mon bouton.
Voici le traitement
Code:
1 2 3 4 5 6 7 8
|
import time
def run(f):
for i in range(0,100):
f.affichage.set_text(f.affichage.get_text()+"\ntest")
time.sleep(1)
print('test') |
Donc mon problème est que la lorsque je clique sur le bouton rien ne ce passe.
Pouvez vous m'indiquez la bonne marche a suivre pour pouvoir faire des traitements long avec une IHM ?
Je vous remercie d'avance pour votre aide ;)