PyQt4用户输入验证 - QlineEdit

Rea*_*rby 6 python regex validation user-interface pyqt4

我在使用PyQt4理解输入验证方面遇到了一些麻烦.这是我的第一个GUI应用程序,第一次使用PyQt4框架.我一直在阅读Class引用,看起来像文本验证的首选方法是通过QRegularExpression类,但对于一些简单的输入验证来说这似乎过分了.

我的注册用户类中有一个方法,可以将用户添加到sqlite数据库中.我还为QlineEdits创建了一个信号,该信号连接到验证文本的方法.SQL输入工作正常但由于某种原因输入验证没有.这不会引起错误.MessageBoxes不会弹出.据我所知,我只创建了一个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)
Run Code Online (Sandbox Code Playgroud)

在语义上我知道这是有道理的,但我无法弄清楚我在语法上的错误.有人可以告诉我,除了使用len之外,是否还有另一个我应该关注的概念?

提前致谢!

小智 8

我希望我理解你的问题,所以你的应用程序中有一个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_())
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助您了解如何在QLineEdit中过滤用户输入,或者根据字符获得用户输入的任何地方...