Bonjour,
J'essaye de lire un code barre avec une douchette en Python, à l'aide de Pyhook(lib trouvable là : http://sourceforge.net/apps/mediawik...itle=Main_Page) et Pythoncom j'ai trouvé ce qu'il me fallait. Si vous avez pas de douchette et que vous voulez aider, sachez qu'une douchette se comporte exactement comme un clavier
Mon code barre est toujours fini par entrée dans mon cas, donc je stock les caractères tappés jusqu'à un hit de la touche entrée.
Par contre cette lecture doit être faite lors de l'execution d'un autre programme, et pythoncom.PumpMessages() est bloquant. Du coup j'ai essayé de mettre le tout dans un thread que j'essaye de killer lorsque celui ci a lu mon code barre.
En effet je veux reprendre l'execution de mon main une fois le code barre lu.
Mais c'est pas bon, voir l'erreur si après. Je sais que killer les threads en Python c'est pas très clean mais je vois pas comment m'en sortir avec le fameux pythoncom.PumpMessages() que je n'arrive pas à contourner.
La sortie console
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49 # -*- coding: cp1252 -*- import time import pythoncom, pyHook from threading import Thread class Mythread(Thread): def __init__ (self): Thread.__init__(self) # create a hook manager self.hm = pyHook.HookManager() self.codeBarre = '' def run(self): # set the hook self.hm.HookKeyboard() # watch for all keyboardsevents self.hm.KeyDown = self.OnKeyboardEvent # wait forever pythoncom.PumpMessages() def OnKeyboardEvent(self,event): if event.Ascii==13: print 'entree saisi au clavier OK' print self.codeBarre globals()["code"] = self.codeBarre sys.exit() return True if event.Ascii != None: if chr(event.Ascii) in ['0','1','2','3','4','5','6','7','8','9']: print chr(event.Ascii) self.codeBarre += chr(event.Ascii) else: print "other character" return False if __name__ == "__main__" : globals()["code"] = '' p1 = Mythread() p1.start() time.sleep(10) print 'code from main '+globals()["code"]
Donc si vous avez des idées sur ce problème !22
22
22
22
55
66
66
55
entree saisi au clavier OK
22225665
Exception RuntimeError: RuntimeError('cannot join current thread',) in <module 'threading' from 'C:\Python26\lib\threading.pyc'> ignored
D'avance merci
Ciao
Partager