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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| from Tkinter import *
import time
from threading import Thread
class Globals():
Retour = None
Terminated = False
class MonEvent(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
print 'lancement du thread MonEvent'
ind = 0
while not Globals.Retour.get() != 'FIN':
ind += 1
print ind
time.sleep(2)
print 'fin du thread MonEvent'
class Affiche(Toplevel):
def __init__(self):
print "lancement d'Affiche"
Toplevel.__init__(self)
self.protocol("WM_DELETE_WINDOW", self.Intercepte)
self.b=Entry(self)
self.b.grid()
self.b.bind("<Return>", lambda event: self.couic(self.b.get()))
def couic(self, result):
Globals.Retour.set(str(result))
if str(result) == 'fin':
print 'demande de fin du thread MaFenetre'
Globals.Terminated = True
print "fermeture d'Affiche"
self.destroy()
def Intercepte(self, event = None):
Globals.Terminated = True
self.destroy()
class MaFenetre(Thread):
def __init__(self):
Thread.__init__(self)
Globals.Terminated = False
def run(self):
print 'debut du thread MaFenetre'
fen = Affiche()
while not Globals.Terminated:
pass
print "le thread MaFenetre s'est termine proprement"
class GUI(Tk):
def __init__(self):
Tk.__init__(self)
Globals.Retour = StringVar()
self.protocol("WM_DELETE_WINDOW", self.Intercepte)
AfficheRetour = Label(self, textvariable=Globals.Retour)
AfficheRetour.grid()
Button(self,text='entry simple', command=self.get_info).grid()
Button(self,text='thread input', command= lambda:MaFenetre().start()).grid()
Button(self,text='thread calcul', command= lambda:MonEvent().start()).grid()
def get_info(self):
self.a=Toplevel(self)
self.b=Entry(self.a)
self.b.grid()
self.b.bind("<Return>", lambda event: self.couic(self.b.get()))
def couic(self, result):
Globals.Retour.set(str(result))
if str(result) == 'fin':
print 'fermeture de a'
self.a.destroy()
def Intercepte(self, event = None):
Globals.Terminated = True
self.destroy()
if __name__=='__main__':
test=GUI()
test.mainloop() |
Partager