【问题标题】:Barcode Scanner tabbing to next line edit条码扫描器跳到下一行编辑
【发布时间】:2020-08-07 05:49:21
【问题描述】:

我正在使用 USB 条码扫描仪设置 Qt lineEdit 字段的文本以扫描生产订单号,我的问题是扫描后窗口关闭而不是转移到下一行 Edit_2 以扫描项目编号。如何设置 lineEdit 以将光标移动到下一个 lineEdit_2 并为下一次扫描做好准备。

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
        self.buttonBox.setGeometry(QtCore.QRect(290, 20, 81, 241))
        self.buttonBox.setOrientation(QtCore.Qt.Vertical)
        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.lineEdit = QtWidgets.QLineEdit(Dialog)
        self.lineEdit.setGeometry(QtCore.QRect(50, 50, 113, 22))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_2.setGeometry(QtCore.QRect(50, 120, 113, 22))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.lineEdit_3 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_3.setGeometry(QtCore.QRect(50, 200, 113, 22))
        self.lineEdit_3.setObjectName("lineEdit_3")

        self.retranslateUi(Dialog)
        self.buttonBox.accepted.connect(Dialog.accept)
        self.buttonBox.rejected.connect(Dialog.reject)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

【问题讨论】:

    标签: python pyqt5 barcode-scanner


    【解决方案1】:

    默认情况下,当单击回车键并且 QDialog 具有焦点时按下 QPushButton 的按钮,并且该单击导致发出拒绝或接受的信号,从而关闭窗口,这是默认处理的,并且autoDefault 属性,因此首先要覆盖该行为。

    另一方面,按回车键不会移动到另一个 QLineEdit,在这种情况下,您必须听那个键并使用 focusNextPrevChild 移动焦点。

    最后QtDesigner生成的代码不要修改,所以我假设你显示的代码在gui.py文件中,我将在main.py中实现逻辑:

    import sys
    
    from PyQt5 import QtCore, QtWidgets
    
    from gui import Ui_Dialog
    
    
    class Dialog(QtWidgets.QDialog, Ui_Dialog):
        def __init__(self, parent=None):
            super().__init__(parent)
            self.setupUi(self)
            self.show()
            for btn in self.buttonBox.buttons():
                btn.setDefault(False)
                btn.setAutoDefault(False)
                btn.setFocusPolicy(QtCore.Qt.NoFocus)
    
        def keyPressEvent(self, event):
            if event.key() in (QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return):
                self.focusNextPrevChild(True)
            super().keyPressEvent(event)
    
    
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
    
        w = Dialog()
        w.show()
    
        sys.exit(app.exec_())
    

    【讨论】:

    • 这是完美的,感谢您提供的信息@eyllanesc
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多