PyQt4用户输入验证-QlineEdit
问题内容:
我在理解PyQt4的输入验证时遇到了一些麻烦。这是我的第一个GUI应用程序,也是第一次使用PyQt4框架。我一直在阅读Class引用,并且看来,进行文本验证的首选方法是通过QRegularExpression类,但是对于某些简单的输入验证而言,这似乎过多了。
我的注册用户类中有一个将用户添加到sqlite数据库中的方法。我还为QlineEdits创建了一个信号,该信号连接到验证文本的方法。SQL输入工作正常,但由于某些原因,输入验证无效。这不会拉出错误。MessageBox只是不弹出。我了解我只创建了一个SIGNAL,但这仅用于测试。
def newUser(self): #This method adds a new user into the login database and displays a pop up window confirming the entry
c.execute("INSERT INTO logins(usernames, passwords)VALUES(?,?)", (self.userEdit.text(), self.passEdit.text())) #sql query inserts entries from line edit and pass edit into database
c.commit() #Save database changes
self.connect(self.userEdit, QtCore.SIGNAL("textchanged()"), self.validText)
def validText(self):
if len(self.userEdit.text()) < 4:
if len(self.passEdit.text()) < 4:
self.msg = QtGui.QMessageBox.information(self, 'Message', 'Not enough characters!', QtGui.QMessageBox.Ok)
else:
self.msg = QtGui.QMessageBox.information(self, 'Message', 'User added successfully', QtGui.QMessageBox.Ok)
从语义上讲,我知道这是有道理的,但我无法弄清楚语法上哪里出了问题。有人可以告诉我,除了使用len之外,还有其他概念吗?
提前致谢!
问题答案:
希望我能理解您的问题,因此您在应用程序中的某个位置有了QLineEdit。并且您想阻止用户输入“奇怪”字符,例如:〜!@#$#%)(&…依此类推,根据我在问题中所读的内容,您使用了从用户那里收集的输入将其发送到数据库中,在这种情况下,如果是数据库,则需要避免再次发送,我会说“奇怪”字符,如果是这种情况,我制作了一个快速应用程序,展示了如何避免这是代码:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
class main_window(QDialog):
def __init__(self):
QDialog.__init__(self)
# Create QLineEdit
le_username = QLineEdit(self)
le_username.setPlaceholderText("Enter username")
le_password = QLineEdit(self)
le_password.setPlaceholderText("Enter password")
# Create QLabel
lb_username = QLabel("Username: ")
lb_password = QLabel("Password: ")
# Adding a layout
self.setLayout(QVBoxLayout())
# Adding widgets to layout
self.layout().addWidget(lb_username)
self.layout().addWidget(le_username)
self.layout().addWidget(lb_password)
self.layout().addWidget(le_password)
#!! ReGex implementation !!
# For more details about ReGex search on google: regex rules or something similar
reg_ex = QRegExp("[a-z-A-Z_]+")
le_username_validator = QRegExpValidator(reg_ex, le_username)
le_username.setValidator(le_username_validator)
#!! ReGex implementation End !!
#.......
self.setMinimumWidth(200)
self.setWindowTitle("ReGEX Validator in Python with Qt Framework")
app = QApplication(sys.argv)
dialog = main_window()
dialog.show()
sys.exit(app.exec_())
我希望这能帮助您弄清楚如何在QLineEdit或任何基于字符的用户输入中过滤用户输入…