QDoubleSpinBox に問題があります。「バックスペース」キーの編集動作は、サフィックスのサイズに依存します。サフィックスとして「m」を設定し、カーソルをスピンボックスの最後に設定して「バックスペース」を押すと、カーソルは「m」サフィックスを超えて値にジャンプし、さらに「バックスペース」で編集できます。サフィックスを「mm」または任意の 2 文字の単語に設定すると、「バックスペース」を何回押しても、カーソルはスピンボックスの最後に残ります。
「validate」メソッドに入るものをデバッグしようとしたところ、奇妙な結果が得られました。カーソルが「0,00m」の末尾にあるときに「バックスペース」を押すと、validate は「0,00m」を受け取ります。カーソルが「0,00_m」の末尾にあるときに「バックスペース」が押された場合、検証は「0,00__m」を受け取ります。カーソルが「0,00_mm」の末尾にあるときに「バックスペース」が押された場合、検証は「0, 00_m_mm"
そのような行動の原因は何ですか?どうすればそれを克服できますか?
# coding=utf-8
from PyQt5 import QtWidgets
class SpinBox(QtWidgets.QDoubleSpinBox):
def __init__(self):
super().__init__()
def validate(self, text, index):
res = super().validate(text, index)
print(text, res, self.text())
return res
if __name__ == "__main__":
q_app = QtWidgets.QApplication([])
sb = SpinBox()
sb.setSuffix(" m")
sb.show()
q_app.exec_()