2011-04-24 87 views
2

首先,抱歉我的英文不好。检查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状态的正确方法是什么?

回答

3

你在这里没有做正确的事情。比较:

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) 

打印True192.168.2.1

+0

谢谢:)。它工作完美:)。我有一个(也许是愚蠢的)问题,为什么状态对象具有“真实”,“成像”,“共轭”等功能,它们是从复数得出的,为什么? :) – utdemir 2011-04-24 12:46:22

+0

@utdmr:有趣(尽管无关) - 我真的不知道,也许这是PyQt的实现 – 2011-04-24 12:53:21

+0

的一些神器,理解,再次感谢。 – utdemir 2011-04-24 12:58:43