- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用一种相当残酷的方法来获取 QValidator 可以轻松提供的内容。在这个小部件上找到一个简单的信息是相当困难的。下面的代码从另一篇文章复制/粘贴(经过一些小的编辑后)。它创建了一个带有连接到 ValidStringLength QValidator 的单行编辑器的对话框,它强制字符串大小为 0 < 长度 < 5。我想了解字符串清理“可执行”函数应该放在哪里:在 fixup() 方法中?请解释 QValidator() 背后的逻辑。
from PyQt4 import QtCore, QtGui
class ValidStringLength(QtGui.QValidator):
def __init__(self, min, max, parent):
QtGui.QValidator.__init__(self, parent)
self.min = min
self.max = max
def validate(self, s, pos):
print 'validate(): ', type(s), type(pos), s, pos
if self.max > -1 and len(s) > self.max:
return (QtGui.QValidator.Invalid, pos)
if self.min > -1 and len(s) < self.min:
return (QtGui.QValidator.Intermediate, pos)
return (QtGui.QValidator.Acceptable, pos)
def fixup(self, s):
pass
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.editLine = QtGui.QLineEdit(self)
self.validator = ValidStringLength(0,5,self)
self.editLine.setValidator(self.validator)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.editLine)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 500, 100)
window.show()
sys.exit(app.exec_())
最佳答案
来自 Qt 文档:
fixup() 是为验证器提供的,可以修复一些用户错误。默认实现什么都不做。例如,如果用户按下 Enter(或 Return)并且内容当前无效,QLineEdit 将调用 fixup()。这使 fixup() 函数有机会执行一些魔术,使无效字符串可接受。
http://qt-project.org/doc/qt-4.8/qvalidator.html
所以是的,如果您的“字符串清理”是尝试更正用户的输入,fixup
应该是执行此操作的正确位置。
编辑:
这应该将前四个字符大写:
def validate(self, s, pos):
print 'validate(): ', type(s), type(pos), s, pos
n = min(4,s.count())
if s.left(n).compare(s.left(n).toUpper()):
return (QtGui.QValidator.Intermediate, pos)
else:
return (QtGui.QValidator.Acceptable, pos)
def fixup(self, s):
n = min(4, s.count())
s.replace(0, n, s.left(n).toUpper())
关于python - PyQt:QValidator 函数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23101267/
我有一个 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
我是一名优秀的程序员,十分优秀!