PyQt4 用户输入验证 - QlineEdit
PyQt4 User Input Validation - QlineEdit
我在理解 PyQt4 的输入验证时遇到了一些问题。这是我的第一个 GUI 应用程序,也是第一次使用 PyQt4 框架。我一直在阅读 Class 参考资料,看起来首选的文本验证方式是通过 QRegularExpression class,但这对于一些简单的输入验证来说似乎有些过分。
我的注册用户 class 中有一个方法可以将用户添加到 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)
从语义上讲,我知道这是有道理的,但我无法弄清楚语法上哪里出错了。有人能告诉我除了使用 len 之外我还应该考虑另一个概念吗?
提前致谢!
我希望我理解你的问题,所以你在你的应用程序的某个地方有一个 QLineEdit。并且您想阻止用户输入 "strange" 个字符,例如:~!@#$#%)(& ...等等,从我在您的问题中读到的内容来看,您使用的输入是从用户将其发送到数据库中,在这种情况下,如果是数据库,则需要避免再次发送我说 "strange" 个字符,好吧......如果是这种情况,那么我做了一个快速应用程序来展示你如何避免这里是代码:
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 中或任何您根据字符获得用户输入的地方过滤用户输入...
我在理解 PyQt4 的输入验证时遇到了一些问题。这是我的第一个 GUI 应用程序,也是第一次使用 PyQt4 框架。我一直在阅读 Class 参考资料,看起来首选的文本验证方式是通过 QRegularExpression class,但这对于一些简单的输入验证来说似乎有些过分。
我的注册用户 class 中有一个方法可以将用户添加到 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)
从语义上讲,我知道这是有道理的,但我无法弄清楚语法上哪里出错了。有人能告诉我除了使用 len 之外我还应该考虑另一个概念吗?
提前致谢!
我希望我理解你的问题,所以你在你的应用程序的某个地方有一个 QLineEdit。并且您想阻止用户输入 "strange" 个字符,例如:~!@#$#%)(& ...等等,从我在您的问题中读到的内容来看,您使用的输入是从用户将其发送到数据库中,在这种情况下,如果是数据库,则需要避免再次发送我说 "strange" 个字符,好吧......如果是这种情况,那么我做了一个快速应用程序来展示你如何避免这里是代码:
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 中或任何您根据字符获得用户输入的地方过滤用户输入...