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或任何基于字符的用户输入中过滤用户输入…