入力マスクを使用して 6 つの数字を入力するために QLineEdit を使用しようとしていますが、問題は、ユーザーが行編集をクリックすると、カーソル位置がクリックした場所とまったく同じになることです。
位置を最初にリセットするのに苦労しています。同様の質問とそれらへの回答を読みましたが、機能させることができません(それらの多くはC ++であり、経験がないため、Pythonでコードを複製することはできません)。
ユーザーが QLineEdit をクリックしたことを認識するイベント フィルターをインストールすることができ、ユーザーがクリックしたときに設定したカーソル位置を印刷することができました。しかし、手動で 0 に設定しようとしても機能しません。まあ、それは機能しますが、QLineEdit を含むアプリケーション全体がフォーカスを失い、ユーザーが戻ってきた場合に限ります。ある意味では、 Filter クラス内でアプリケーション全体を更新/再描画する方法を探しています。
class Filter(QObject):
def eventFilter(self, widget, event):
# FocusIn event
if event.type() == QEvent.FocusIn:
print 'focus in'
widget.setCursorPosition(0)
return False
else:
return False
これによりカーソル位置が 0 に設定されますが、実際のアプリケーションでは、Alt+Tab キーを押すか、ウィンドウ全体がフォーカスを失い、再びフォーカスを得た場合にのみ表示されます。ウィジェット/ウィンドウの手動 repaint()/update() は何もしません。