USB条码扫描仪和kivy

时间:2017-09-22 00:41:00

标签: python python-2.7 kivy

我正在尝试捕获条形码扫描。例如,在Tkinter中,我能够这样做:

标签:

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)

功能:

def get_key(self, event):
    if event.char in '0123456789':
        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 = ' '

现在在Kivy,我在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)

我现在只是打印到终端。我在终端中获得了一行代码,如:

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

顺便说一下,13(最后)一直弹出。大多数条形码只有12位数字。如果我将它存储在变量中,那将是变量中的数字,13。就像变量没有保存所有数字一样。我尝试了for循环,但无法将这些scancodes存储在变量中,或者更恰当地存储在列表中。它就像90%,但不了解如何将这些代码存储在列表中。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分: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)