QLineEdit を使用して、値のユーザー入力を取得したいと考えています。入力を範囲内に制限したいので、QDoubleValidator を使用する必要があります。許容値を超えた場合はテキストを top() 値に設定し、下回った場合は bottom() 値に設定するように動作させたいと思います。
textChanged、returnPressed、および inputRejected シグナルの使用を調べました。私が問題を抱えている理由は、バリデーターを範囲で設定すると、returnPressed がここで言及されている check_validator 関数に入らないためです。次に、入力拒否信号でキャッチできるのではないかと思ったのですが、何らかの理由でそれも機能していないようです。ここにいくつかのコードがあります:
class LineEdit(QLineEdit):
def __init__(self, text, parent=None):
super(LineEdit, self).__init__(parent)
self.validator = QDouble Validator()
self.setValidator(self.validator)
self.text = text
self.textChanged.connect(self.new_text)
self.returnPressed(self.check_validator)
def new_text(self, text):
self.ntext = text
def check validator:
try:
if float(self.ntext) > self.validator.top():
self.text = str(self.validator.top()
if float(self.ntext) < self.validator.bottom():
self.text = str(self.validator.bottom()
else:self.text = self.ntext
self.setText(self.text)
except:
mssg = QMessageBox.about(self, "Error", "Input can only be a number")
mssg.exec()
self.setText(self.text)
def valRange(self, x1, x2):
self.validator.setRange(x1, x2)
ウィンドウがポップアップしたときに、「noneType」オブジェクトに属性「exec」がないという属性エラーも表示されます。そのウィンドウを適切に閉じる方法についての手順が不足していると思います。