python - 在没有 QLineEdit 的情况下获取 RFID 文本
问题描述
我有一个 QLineEdit,它将获取 RFID 标签的值并使用接收到的值登录用户,我已经设置了 QLineEdit,以便在按下回车键时调用登录函数。
我剩下的唯一问题是 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_())
推荐阅读
- javascript - 在 HTML 中拖放播放列表?
- sql - 我的请求包含括号错误,但是没有
- python - 如何修复“TypeError:'str' object is not callable”?
- powerapps - 如何将参数从 Power Apps 发送到 Power Automate Flow
- web-services - 从 Basic/TB WebBrowser 通过基本 HTML 版本网站访问 WebMail(即:“Mail.com”)电子邮件
- django-models - GeoDjango / GDAL:存储了错误的数据字段
- r - 使用 R 自定义 ggplot 图例
- windows - 有没有办法在电子窗口应用程序中获取联系人列表
- django - 创建第一个数据库后,我无法使用 django 在 postgres 中创建另一个数据库
- python - 是否可以复制列表分配?