gpt4 book ai didi

python - 检查 QValidator 的状态

转载 作者:行者123 更新时间:2023-11-28 23:05:42 25 4
gpt4 key购买 nike

首先,抱歉我的英语不好。

我正在尝试从用户那里获取 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 状态的正确方法是什么?

最佳答案

你在这里做的事情不对。对比:

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

关于python - 检查 QValidator 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5770441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com