Tkinter - 在没有Entry Widget的情况下获取输入?

时间:2017-01-28 18:32:37

标签: python tkinter

也许我正确地提出了我的问题。解释:

我有一个USB条形码扫描仪,我连接到RPI2,我可以扫描条形码,将12位数字放入一个终端(例如070038348184),点击条形码扫描仪触发按钮。这向我验证条形码扫描仪和RPI2可以相互作用。话虽如此,我正在尝试编写一个Tkinter / Python脚本,以便在不使用条目小部件的情况下从此扫描程序获取输入。这个项目的本质没有键盘,只有触摸屏。因此,使用条目和按钮小部件来将条形码扫描存储到变量中是我想要避免的。我做了一些研究,但无法辨别任何明确的解决方案。最后,我希望能够在扫描仪上拉动触发器并从终端获取数字,并将它们存储到变量中,以便在Tkinter / Python脚本中使用。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

据我所知,这款扫描仪可以用作键盘 - 它可以直接将按键发送到程序 - 所以也许可以尝试使用bind('<Key>', callback)来捕获所有的按键。

import tkinter as tk
from tkinter.messagebox import showinfo

def get_key(event):
    global code

    if event.char in '0123456789':
        code += event.char
        #print('>', code)
        label['text'] = code

    elif event.keysym == 'Return':
        #print('result:', code)
        showinfo('Code', code)

# --- main ---

root = tk.Tk()
root.geometry('100x20')

# global variables
code = ''

label = tk.Label(root, text="?")
label.pack()

root.bind('<Key>', get_key)

root.mainloop()

编辑:正如您所要求的那样 - 同样在课堂上

import tkinter as tk
from tkinter.messagebox import showinfo

class Window(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)

        self.geometry('100x20')

        self.code = ''

        self.label = tk.Label(self, text="?")
        self.label.pack()

        self.bind('<Key>', self.get_key)

    def get_key(self, event):

        if event.char in '0123456789':
            self.code += event.char
            #print('>', self.code)
            self.label['text'] = self.code

        elif event.keysym == 'Return':
            #print('result:', self.code)
            showinfo('Code', self.code)

# --- main ---

win = Window()
win.mainloop()

#Window().mainloop()