如何读取条码

时间:2021-03-19 09:03:29

标签: python pyqt5

我正在编写代码,我想在其中扫描条形码并要求输入特定内容。现在我做到了 它带有“保存按钮”,我必须手动询问输入是否正确。

但我想在我写输入时自动做到这一点。

我的问题:

当我在没有“保存按钮”的情况下编写输入时,程序不会接受文本框的更改输入。如果我使用 while 循环,我的程序就会崩溃并且不显示 UI。

我想用变量“self.inp_sn”读取它并询问是否有正确的长度并且只有数字。但没有成功。也许有一种方法可以在不使系统崩溃的情况下“延迟”课程或进行循环,但遗憾的是我找不到任何好的解决方案。

代码:

from PyQt5 import QtCore, QtGui, QtWidgets 
from PyQt5.QtGui import * 
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
# from PyQt5.QtWidgets import QMessageBox, QWidget
import sys 

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Seriennummer")
        self.setFixedSize(300, 100)
        self.UI()

    def UI(self):
        
        self.set_sn()
        self.click_button()
        self.show()
        
        
    def set_sn(self):
        print(1234)
        self.sn_Textbox = QLineEdit(self)
        self.sn_Textbox.move(85, 35)
        self.sn_Textbox.resize(130,20)
        self.sn_Textbox.setPlaceholderText('Seriennummer')
        
    def checkstatus(self):
        self.state = 0
        self.inp_sn = self.sn_Textbox.text()
        
        if len(self.inp_sn) ==  7 and self.inp_sn.isdigit():
            print("Your Text: ", self.sn_Textbox.text())
            self.sn_Textbox.setFocusPolicy(Qt.StrongFocus)
            self.state = 1
                
        else:
            print(self.inp_sn)
            print("Wrong input")
                    
                
    def click_button(self):
        self.save_sn = QPushButton("Save",self)
        self.save_sn.move(85, 55)
        self.save_sn.clicked.connect(self.checkstatus)

def main():
    App = QApplication(sys.argv)
    window = Window()
    
    
    sys.exit(App.exec())
    
    
if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:2)

默认情况下,条形码会添加一个结束线 (\n),因此在您的情况下,您只需要使用 editingFinished 信号:

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Seriennummer")
        self.setFixedSize(300, 100)
        self.UI()

    def UI(self):
        self.set_sn()
        self.show()

    def set_sn(self):
        print(1234)
        self.sn_Textbox = QLineEdit(self)
        self.sn_Textbox.move(85, 35)
        self.sn_Textbox.resize(130, 20)
        self.sn_Textbox.setPlaceholderText("Seriennummer")
        self.sn_Textbox.editingFinished.connect(self.checkstatus)

    def checkstatus(self):
        print(self.sn_Textbox.text())

    def click_button(self):
        self.save_sn = QPushButton("Save", self)
        self.save_sn.move(85, 55)
        self.save_sn.clicked.connect(self.checkstatus)