繁体   English   中英

在没有QLineEdit的情况下获取RFID文本

[英]Get the RFID text without QLineEdit

我有一个QLineEdit,它将获取RFID标签的值,并使用接收到的值登录用户,我已经设置了QLineEdit,以便在按下Enter键时调用登录功能。

我唯一剩下的问题是QLineEdit是可见的,这不是必需的,因为用户不会输入其RFID标签的值,他们将对其进行扫描,然后扫描仪将输入该值并按Enter。

rfid_enter = QLineEdit()
rfid_enter.returnPressed.connect(lambda: log_user_in(rfid_enter.text()))


def log_user_in(value):
    print(value) (THIS WILL LOG THE USER IN)

QLineEdit需要具有焦点来获取键盘事件,但是要使其具有焦点必须可见,因此隐藏它并不是解决方案。

正如OP在窗口的注释中所指出的,只有: 两个标签,和一些不处理键盘事件的间隔符 ,因此没有小部件可以拦截该事件,因此窗口可以毫无问题地获取它们(如果有的话)是其他小部件,例如QLineEdits,QTextEdit,QSpinBox等,逻辑可能会更改)。

考虑到上述情况,我实现了以下逻辑:

import string
from PyQt5 import QtCore, QtWidgets


class Widget(QtWidgets.QWidget):
    returnPressed = QtCore.pyqtSignal(str)

    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(
            QtWidgets.QLabel("My Label", alignment=QtCore.Qt.AlignHCenter),
            alignment=QtCore.Qt.AlignTop,
        )
        self.m_text = ""
        self.returnPressed.connect(self.log_user_in)

    def keyPressEvent(self, event):
        if event.text() in string.ascii_letters + string.digits:
            self.m_text += event.text()
        if event.key() in (QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter):
            self.returnPressed.emit(self.m_text)
            # clear text
            self.m_text = ""
        super(Widget, self).keyPressEvent(event)

    @QtCore.pyqtSlot(str)
    def log_user_in(self, text):
        print(text)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.resize(240, 320)
    w.show()
    sys.exit(app.exec_())

如果整个窗口都是他创建的类,则来自eyllanesc的答案将起作用,但是在我的情况下,布局将更改,因此无法将其用作主窗口。

我采用了一种作弊方法,即尝试尽可能多地隐藏盒子,最后得到这个结果。


class LogInRFIDListener(QtWidgets.QPlainTextEdit):
    def __init__(self):
        super(LogInRFIDListener, self).__init__()
        self.setTextInteractionFlags(QtCore.Qt.TextEditable)
        self.setCursor(QtCore.Qt.ArrowCursor)
        self.setStyleSheet("border: none; color: transparent;")  # Hide the border around the text box
        self.setCursorWidth(0)  # Hide the cursor

    def keyPressEvent(self, event):  # Major restricting needed
        if event.key() in (QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter):
            log_user_in(self.toPlainText())
        super(LogInRFIDListener, self).keyPressEvent(event)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM