2011-04-24 38 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