参考链接:Python 监控扫码枪输入_python扫码枪条码自动入库_阿伟-_-的博客-CSDN博客
一,USB即插即用扫码枪
描述:项目需要使用USB即插即用扫码枪,发现扫码枪并不是一个串口设备,而是一个键盘输入设备,特此记录一下。
代码如下:
from PyQt5.QtCore import pyqtSignal,pyqtSlot,QThread,Qt
from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5 import QtWidgets
from Form import Ui_Form
import sys,threading
from pynput import mouse,keyboard
CODE = ""
class BaseThread(QThread):
def __init__(self):
super(BaseThread, self).__init__()
class mainWin(QMainWindow,Ui_Form):
signalString = pyqtSignal(str)
def __init__(self ):
super(mainWin,self).__init__()
self.setupUi(self)
self.textEdit.setFocus()
self.signalString.connect(self.updateUI)
try:
self._threadScanner = threading.Thread(target=self.scanner)
self._threadScanner.daemon = True # 守护进程,主进程挂掉后,自动挂掉 python3.10以上版本支持
self._threadScanner.start()
except Exception as e:
print(str(e))
def updateUI(self,mMsg):
self.textEdit.clear()
self.lineEdit.clear()
self.textEdit.append(mMsg)
data = mMsg.split(",")
if len(data)>2:
self.lineEdit.setText(data[2])
def scanner(self):
with keyboard.Listener(on_release=self.on_release) as listener:
listener.join()
# 处理键盘输入的数据
def on_release(self,key):
global CODE
try:
CODE += key.char
except Exception as e:
try:
if key == key.enter: # 如果扫码枪中的数据是回车enter按键
self.signalString.emit(CODE)
print(CODE)
CODE = ""
except Exception as e:
CODE = ""
@pyqtSlot()
def on_Btn_OK_clicked(self):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = mainWin()
mainWindow.show()
sys.exit(app.exec())
说明:增加了一个信号和槽,把数据传到UI界面,避免界面卡主。
运行环境:Python3.10 +pyQt
运行结果如