Tkinter - 如何在没有Entry小部件的情况下获取输入?

3
也许我没有正确地命名我的问题。为了解释:
我有一个USB条形码扫描仪,连接到RPI2上,我可以通过点击条形码扫描触发按钮扫描条形码,并将12位数字放入终端(例如070038348184)。这证明了条码扫描仪和RPI2可以相互交互。在此基础上,我正在尝试编写一个Tkinter / Python脚本来获取来自该扫描仪的输入,而不使用输入框小部件。该项目的性质没有键盘,只有触摸屏幕。因此,我希望避免使用输入和按钮小部件以获取存储在变量中的条码扫描。我已经进行了一些研究,但无法找到任何清晰的解决方案。最后,我希望能够按下扫描仪上的扳机并从终端获取数字,并将其存储到变量中以供Tkinter / Python脚本使用。如有建议,敬请赐教。

我理解这个扫描仪的工作方式就像一个键盘 - 它直接将按键发送到终端 - 因此您可以使用bind(<Key>, callback)来获取每个单独的数字并将其附加到字符串或列表中。 - furas
我感谢这些信息。我会进一步研究。 - Jason Woodruff
1个回答

2
据我了解,这个扫描仪的工作方式类似于键盘 - 它直接将按键信息发送到程序中,因此可以尝试使用 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()

我可以处理这个!感谢furas提供的精彩信息。 - Jason Woodruff
这段代码如何实现为一个class - Jason Woodruff
我犯了一个错误,就是 self.bind('<Key>', self.get_key)。再次感谢您,furas。 - Jason Woodruff
我正在尝试将 bind 绑定到一个框架上:self.frame.bind('<Key>', self.get_key) - Jason Woodruff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接