我正在编写代码,我想在其中扫描条形码并要求输入特定内容。现在我做到了 它带有“保存按钮”,我必须手动询问输入是否正确。
但我想在我写输入时自动做到这一点。
我的问题:
当我在没有“保存按钮”的情况下编写输入时,程序不会接受文本框的更改输入。如果我使用 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()
答案 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)