gpt4 book ai didi

python - PyQt:QValidator 函数定义

转载 作者:行者123 更新时间:2023-11-28 18:43:37 25 4
gpt4 key购买 nike

我目前正在使用一种相当残酷的方法来获取 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/

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