2017-09-22 28 views
0

バーコードスキャンをキャプチャしようとしています。USBバーコードスキャナとKivy

レーベル::

self.code = ' '   
self.status = tk.Label(frameStatus, text="Scanner is waiting...") 
self.status.config(height=20, bd=1, relief=SUNKEN, anchor=W) 
self.status.pack(side=BOTTOM, fill=X) 

self.bind('<Key>', self.get_key) 

機能:ちょうど例えば、Tkinterの中で、私はこのように、これを行うことができたKivyで今

def get_key(self, event): 
    if event.char in '': 
     self.code += event.char    
     self.status['text'] = "Searching UPC Code: " + self.code  

    elif self.status == self.status: 
     self.animate() 
     self.status.after(2000)   
     self.status['text'] = "Scanner is Waiting..." 
     self.get_info() 
     self.code = ' ' 

、私はclass MsgAppApp(App):でコードを持っています

class MsgAppApp(App):  

    def build(self): 
     self.main_screen = MsgApp() 
     return self.main_screen 

    def on_start(self): 
     Clock.schedule_interval(self.main_screen.update_date, 1) 
     Clock.schedule_interval(self.main_screen.update_time, 1) 
     Window.bind(on_keyboard = self.main_screen.item_added) 

ライン:

それは私が変更されたラベルに結合します
Window.bind(on_keyboard = self.main_screen.item_added) 

は、ラベルの変更を行いますitem_addedと呼ばれる機能を指しますが、問題は、私はスキャンしたときに、私は唯一のscancodeを取得していますということです。バーコードからの実際の数字ではありません。これらの数字を実際の数字に交換するための辞書を作ることができたので、本当に問題ありません。たとえば、コード番号「48」は数字「0」、コード「49」〜「1」などを指しています。最大の問題は、最後にscancodeが得られることです。ここに私の機能があります:

def item_added(self, instance, scancode, *largs): 
    scancodes = [ ] 
    scancodes.append(scancode) 
    print(scancodes) 

私は今のところターミナルに印刷しています。すべての時間をポップアップする(終わり)13、バイウェイ

48 
55 
56 
55 
52 
50 
50 
51 
48 
49 
57 
49 
13 

:私のような端末内のコードの行を取得します。ほとんどのバーコードには12桁しかありません。それを変数に格納すると、その変数の番号になります。変数がすべての数字を保持していないようです。 forループを試しましたが、これらをscancodesを変数に格納することも、適切にリストに格納することもできません。それは90%のようですが、これらのコードをリストに保存する方法を理解していません。どんな助けもありがとう。

+0

(1)例えば、空のリストを作成しますscancodes = [](2)スキャンコードを追加します。 scancodes.append(スキャンコード)。 – ikolim

+0

残念ながら、同じ結果です。今私は[13]とのリストしか持っていません。それは、それが "急いでいる"ようなもので、最後のものは唯一保存されています。実際には、私はすでにこれを試してきましたが、言及するのを忘れてしまいました。 –

+0

また、 "scancode"を "instance"に置き換え、これを13回取得します。[]同じ行です。 –

答えて

0

メソッドに「scancodes = []」を入れると、メソッドはitem_addedが呼び出されるたびに作成され、破棄されます。以下のよう

使用Kivy ListProperty:

スニペット

from kivy.properties import ListProperty 
... 
class MsgApp(...): 
    scancodes = ListProperty([]) # creates an empty list 
    .... 
    def item_added(self, instance, scancode, *largs): 
     self.scancodes.append(scancode) 
     print(self.scancodes) 
+0

ありがとうikolim。私が異なったやり方をしなければならなかったのは、print(self.scancodes)だけでした。今私はリストのすべての数字を持っています。不足している主なコンポーネントはListPropertyです。私が学ぶのを助けてくれてありがとう –

関連する問題