【发布时间】:2015-11-18 14:13:26
【问题描述】:
我在理解 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)
从语义上讲,我知道这是有道理的,但我无法弄清楚我在语法上哪里出错了。有人可以告诉我,除了使用 len 之外,是否还有其他我应该研究的概念?
提前致谢!
【问题讨论】:
-
第 1 步是使用调试器或至少使用
print确保您的信号完全触发。我相信这个信号是区分大小写的,所以你需要 textChanged() 而不是 textchanged()。为什么不在初始化 userEdit 时将信号连接到您的 validText 插槽?我不确定您在哪里/如何调用 newUser(),但大概您想在向数据库提交任何内容之前验证用户名和密码。 -
感谢您的回答。这些都是好点,我一定会重新解决这个问题。我不知道为什么我将它设置为在验证之前提交更改。 @nb1987
标签: python regex validation user-interface pyqt4