USB条码扫描仪和kivy

2024-05-19 08:36:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着捕捉条形码扫描。例如,在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)

功能:

^{pr2}$

现在在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%是这样,但不知道如何将这些代码存储在列表中。任何帮助都将不胜感激。在


Tags: 代码selfaddedbindmainondefstatus
1条回答
网友
1楼 · 发布于 2024-05-19 08:36:11

通过将“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)

相关问题 更多 >

    热门问题