1

3桁(ゼロを含む)を表示するように変更されたこのQSpinBoxクラスがあります。

class ThreeDigitSpinBox(QtGui.QSpinBox):
    def __init__(self, *args):
        QtGui.QSpinBox.__init__(self, *args)

    def textFromValue(self, value):
        return "%03d" % value

私の問題は、ウィジェットの既存の値を選択して削除し、キー入力を開始するたびに、カーソル位置がキー入力を台無しにすることです。

QSpinBox 内のすべてを削除したとしましょう。次に、値「314」を入力します。

(「|」を使用してカーソルを表します)

「3」を入力するとすぐに、ボックスに「003」が表示され、最初の 0 の直後にカーソルが表示されます。「0|03」。

2桁目の「1」を続けてキーを押すと、SpinBoxは2桁目の直後にカーソルを持って「103」と表示します。" 10|3 "

カーソルの位置の関係で、意図した数字「314」が入力されませんでした。代わりに、「314」の 3 桁すべてを入力すると、「1043」が表示されます。

数字を正しく入力できるように、カーソルが適切な位置にあることを確認するにはどうすればよいですか?

Python 2.7.3 (32 ビット) で Windows XP SP3 を使用しています。

4

1 に答える 1

1

基本クラスQAbstractSpinBoxkeyboardTrackingのパラメーターを使用できるようです

これが false に設定されている場合、Enter キーを押す前に valueChanged シグナルを送信しないか、ウィジェットがフォーカスを失います。

Qt ドキュメントからの説明:

キーボード トラッキングが有効になっている場合 (デフォルト)、キーボードから新しい値が入力されている間、スピンボックスは valueChanged() シグナルを発行します。

たとえば、ユーザーが 6、0、および 0 を入力して値 600 を入力すると、スピンボックスは値がそれぞれ 6、60、および 600 の 3 つのシグナルを発行します。

キーボード トラッキングが無効になっている場合、スピンボックスは入力中に valueChanged() シグナルを発行しません。リターンキーが押されたとき、キーボードのフォーカスが失われたとき、または矢印キーを押すなど、他のスピンボックス機能が使用されたときに、後でシグナルを発行します。

pyqt docsはいつものように、ここではほとんど役に立ちません。

于 2014-06-05T10:09:31.797 に答える