Créer un event pout Tkinter
Salut,
Je dois émettre recevoir des messages d'une uart sous Tkinter et je voudrais rester en événementiel. Je dois donc créer un thread qui reçoit les messages et qui envoie des évènements. Pour le thread, ça va, je suis parti de la FAQ python, mais pour les events, je ne vois pas trop. Il y a bien les virtual events dans Tkinter, mais si j'ai bien compris, l’émetteur de l'event ne peut être qu'une combinaison de touches. :? Donc si quelqu'un a une piste pour créer un event, je suis preneur.
Dans l'exemple ci-dessous, c'est le fonctionnement que je ne veux pas, à savoir que c'est le thread eventMaker qui traite le message parce que je n'ai pas pu faire fonctionner les lignes commentées.
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
| import threading
import sys
import time
import Tkinter
import random
class EVENT():
def __init__(self, text='???'):
self.message = text
def get(self):
return self.message
def eventMaker(text, running, win):
while running.get():
if random.randint(0, 1000) == 0:
sys.stdout.write(text)
#~ win.event_add("<<message>>", EVENT(text))
eventShow(EVENT(text))
time.sleep(0.001)
def eventShow(message):
if message.get() == 'a':
a_counter.set(a_counter.get() + 1)
elif message.get() == 'b':
b_counter.set(b_counter.get() + 1)
win = Tkinter.Tk()
#~ win.bind("<<can_msg>>", eventShow)
running = Tkinter.IntVar(value=1)
a_counter = Tkinter.IntVar(value=0)
b_counter = Tkinter.IntVar(value=0)
Tkinter.Label(win, textvariable=a_counter, width=20).grid()
Tkinter.Label(win, textvariable=b_counter, width=20).grid()
a = threading.Thread(None, eventMaker, None, ('a', running, win))
b = threading.Thread(None, eventMaker, None, ('b', running, win))
a.start()
b.start()
win.mainloop()
running.set(0)
sys.stdout.write('\nend of program\n') |