Bonjour,
Je souhaite programmer la manip suivante et je ne sais pas comment faire :
J'ai un lecteur RFID (lecture par radiofréquence) connecté au PC via le port RS232. Livré avec l'appareil j'ai un dll et des fonctions pour le commander.
ce que je veux faire, c'est mettre en place un canevas+boutons d'action dans une fenetre et quand le lecteur détecte un objet, en fonction de son numéro d'identification il m'affiche dans le canevas une petite image associée.
Pour se faire,
j'ai mis en place la fenetre
et j'ai créer une boucle qui interroge l'appareil et lorsqu'il y a une réponse valable qui devrait afficher l'image par appel de la fonction affiche_cartes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 def affiche_cadre(self): "Affiche le fond" self.fen=Tk() self.temp={} self.fen.title('Affectation des cartes') self.fond=Canvas(self.fen, width=730, height=600, bg='dark green') self.fond.pack(side=LEFT) self.cartes={} # dictinnaire joueurs : codes image ; nécéssaire pour afficher e1=Button(self.fen,text='Annuler',command=self.fen.destroy) e1.pack() e2=Button(self.fen,text='Start',command=self.lecture) e2.pack() self.fen.mainloop()
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 def lecture(self): "boucle observation RFID" result=0 fon=windll.RRMifare32 fon.OpenComPort(0) p=POINTER(c_long) p=pointer(c_long(1)) p1=POINTER(c_long) p1=pointer(c_long(1)) card=POINTER(c_long) card=pointer(c_long(1)) result=fon.OpenRf() verton=fon.ControlLed(0) while (result==0): interocarte=fon.RRMifare_Request(0 ,p) if p.contents.value==4: carte=fon.RRMifare_AntiColl(card) if card.contents.value==288315146: result=1 elif card.contents.value>1000: self.affiche_cartes(card.contents.value) fon.RRMifare_Select(card.contents.value,p1) fon.RRMifare_Halt() p=pointer(c_int(1)) card=pointer(c_long(1)) if result==1:break verton=fon.ControlLed(1) fon.CloseRf() fon.CloseComPort()Mais ça marche pas. Je pense que la boucle While "suspend" le mainloop. Les cartes s'affichent seulement après que la boucle ait été interrompu par une carte avec un identifiant particulier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 def affiche_cartes(self,id_c): "affiche les cartes vues" i=self.eq_id_carte[id_c]/4 j=self.eq_id_carte[id_c]%8 carte=self.equiv(i*4+j) carte=carte+'.gif' a,b=65+j*85,70+i*120 self.temp[i*8+j]=PhotoImage(file=carte) self.eq_objet_carte[self.fond.create_image(a,b,image=self.temp[i*8+j])]=8*i+j #renseigne le dico equivalence objet / carte
J'imagine que je devrais travailler avec une gestion d'évenement pour que l'affichage se fasse en direct mais je ne sais pas comment faire.
Merci de votre aide
PS : Je suis neuf dans la programmation
Partager