Проверка состояния QValidator - PullRequest
2 голосов
/ 24 апреля 2011

Во-первых, извините за мой плохой английский.

Я пытаюсь получить IP от пользователя. Я использую QRegExpValidator для проверки ввода пользователя. Валидатор успешно блокирует нежелательные символы. Но я хочу узнать, что это правильный IP-адрес, когда пользователь нажимает кнопку. Конечно, я могу проверить текст вручную, но, кажется, есть лучший способ, используя перечисление состояния QValidator. QValidator. Приемлемым является то, что мне нужно проверить. Но я не могу понять, как я могу это использовать

Вот что мне нужно использовать: 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 Ответ

4 голосов
/ 24 апреля 2011

Вы не правильно делаете здесь. Сравнение:

validator.State==QtGui.QValidator.Intermediate

Сравнивает перечисление type с одним из его значений - всегда будет 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)

Отпечатки True для 192.168.2.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...