- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,抱歉我的英语不好。
我正在尝试从用户那里获取 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/
我有一个 Qt 小部件,它应该只接受一个十六进制字符串作为输入。将输入字符限制为 [0-9A-Fa-f] 非常简单,但我想让它在“字节”之间显示一个分隔符,例如,如果分隔符是空格,然后用户键入 001
首先,抱歉我的英语不好。 我正在尝试从用户那里获取 IP。我正在使用 QRegExpValidator 检查用户输入。验证器成功地阻止了不需要的字符。但我想知道当用户点击按钮时它是一个正确的 IP。当
我目前正在使用一种相当残酷的方法来获取 QValidator 可以轻松提供的内容。在这个小部件上找到一个简单的信息是相当困难的。下面的代码从另一篇文章复制/粘贴(经过一些小的编辑后)。它创建了一个带有
我正在尝试使用 QValidator 后代(实际上是在 PyQt5 中,但这应该无关紧要)来验证一系列行编辑。 一小段摘录是: class IPv4(QWidget): def __init_
我很好奇是否有人知道通过将其重置为零来删除 QValidator 是否会泄漏内存。 QT Documentation提到验证器被“移除”,但这是否也意味着它被删除了? 我的意思的一个例子......
示例代码: QDoubleValidator *validator = new QDoubleValidator(); myInputLineEdit->setValidator(validator)
我的项目中有一个 QLineEdit。我想在 lineEdit 上使用 QValidation。 #Create lineEdit itemValue = QtWidgets.QLineEdit()
我的项目中有一个 QLineEdit。我想在 lineEdit 上使用 QValidation。 #Create lineEdit itemValue = QtWidgets.QLineEdit()
在将可编辑的 QCombobox 输入添加到 QCombobox 之前,我尝试验证它是否是目录。 from PySide import QtGui, QtCore class DirValidator
我正在尝试开发一个使用 Qt 的应用程序。我试图让应用程序同时使用 PySide 和 PyQt4。除了我的自定义 QtGui.QValidator 类之外,我没有遇到任何重大兼容性问题: import
我想要一个接受 ip 地址的行编辑。如果我将输入掩码作为: ui->lineEdit->setInputMask("000.000.000.000"); 它接受大于 255 的值。如果我给出一个验证器
QLineEdit 有一个信号 QLineEdit::editingFinished 当用户完成编辑时发出,例如按回车键。但是,如果设置了验证器或输入掩码,则只有在输入有效时才会发出 editingF
我是一名优秀的程序员,十分优秀!