【发布时间】:2017-09-22 00:41:00
【问题描述】:
我正在尝试捕获条形码扫描。例如,在 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) 创建一个空列表,例如scancodes = [] (2) 将扫描代码附加到它例如scancodes.append(scancode).
-
不幸的是,同样的结果。现在我有一个只有 [13] 的列表。就像是在“冲”进去,数字,最后一个只保留了一个。事实上,我之前已经尝试过,只是忘了提及。
-
另外,我将“scancode”与“instance”互换,得到了 13 次,[
] 同一行。 -
Edit 您的问题并显示代码如何附加到
list。看来您在每个append之前清除了您的list? -
我刚刚编辑了我的问题,但无论如何,它只允许一个扫描码,而不是多个扫描码。无论最后一个被扫描的数字是最后一个附加的数字。在这种情况下,是[13]。显然,我没有正确使用它,但它只适用于一个输入。
标签: python python-2.7 kivy