我正在尝试捕获条形码扫描。例如,在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%,但不了解如何将这些代码存储在列表中。任何帮助,将不胜感激。
答案 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)