检查QValidator的状态
首先,抱歉我的英语不好。
我正在尝试获取用户的IP地址。我使用QRegExpValidator来检查用户输入,这个验证器成功地阻止了不想要的字符。但是,当用户点击按钮时,我想确认输入的确是一个有效的IP地址。当然,我可以手动检查文本,但似乎有更好的方法,就是使用QValidator的状态枚举。QValidator.Acceptable是我需要检查的状态。但我不知道该如何使用它。
这是我需要使用的内容:http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qvalidator.html#State-enum
这是我尝试过的代码(从主程序中抽取出来的):
from PyQt4 import QtCore, QtGui
from functools import partial
class Gui(QtGui.QDialog):
def __init__(self):
QtGui.QDialog.__init__(self)
editLayout=QtGui.QFormLayout()
edit=QtGui.QLineEdit()
edit.setMinimumWidth(125)
regex=QtCore.QRegExp("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
validator=QtGui.QRegExpValidator(regex, edit)
edit.setValidator(validator)
editLayout.addRow("Enter Client IP:", edit)
button=QtGui.QPushButton("Add Client")
button.clicked.connect(partial(self.addClientButtonClicked, edit, validator))
layout=QtGui.QVBoxLayout()
layout.addLayout(editLayout)
layout.addWidget(button)
self.setLayout(layout)
def addClientButtonClicked(self, edit, validator):
print("ip=", edit.text())
print(validator.State==QtGui.QValidator.Intermediate)
app=QtGui.QApplication([])
g=Gui()
g.show()
app.exec_()
期望的输出:
ip= 192.168.
False
ip= 192.168.2.1
True
但这是我得到的结果:
ip= 192.168.
False
ip= 192.168.2.1
False
检查QValidator状态的正确方法是什么?
1 个回答
5
你这里做得不对。这个比较:
validator.State==QtGui.QValidator.Intermediate
是把一个枚举类型和它的某个值进行比较——这个比较结果总是会是False
!
应该使用validate
方法来代替:
def addClientButtonClicked(self, edit, validator):
print("ip=", edit.text())
print(validator.validate(edit.text(), 0))
这样对于192.168.2.1
的结果是:
('ip=', PyQt4.QtCore.QString(u'192.168.2.1'))
(2, 0)
validate
返回的元组的第一个元素是状态,你可以把它和QValidator
的各种状态进行比较:
def addClientButtonClicked(self, edit, validator):
state, pos = validator.validate(edit.text(), 0)
print(state == QtGui.QValidator.Acceptable)
对于192.168.2.1
会打印出True