【问题标题】:USB barcode scanner and kivyUSB条码扫描仪和kivy
【发布时间】: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


【解决方案1】:

通过在您的方法中添加“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)

【讨论】:

  • 谢谢 ikolim。我唯一需要做的就是打印(self.scancodes)。现在我有了列表中的所有数字。缺少的主要组件是 ListProperty。感谢您帮助我学习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多