textChanged
とeditingFinished
をQLineEdit
に結合する方法はありますか?問題は、QLineEdit
から何も変更せずにカーソルを移動するだけでも、editingFinished
が放出されることです。一方、私は編集を終えた後に何らかの変更が行われたときにだけ信号を出したいと思っています。PyQt4:QLineEditにtextChangedとeditingFinishedを組み合わせる
私は、現在のテキストのどこかに格納し、入力したテキストと比較して、それが異なる場合にのみ何かを行うことしか想像できません。しかし、純粋に信号処理に基づいた解決策があるのだろうかと思います。
EDIT:最後に、現在のテキストを保存して新しいテキストと比較し、提案された解決策に従わなくてはなりませんでした。私のアプリケーションでは、 "1.2345"と "1.23"は同じテキストになりますが、この場合でも他の値を更新する必要があることに気付きました。私は@Avarisと@ekhumoroの詳細な回答とコメントを本当に感謝しており、元々投稿された問題を解決するように思われるので、それを受け入れます。すべての編集(プログラム及びマニュアル)を捕捉するための
class MyLineEdit(QtGui.QLineEdit):
textModified = QtCore.pyqtSignal(str, str) # (before, after)
def __init__(self, contents='', parent=None):
super(MyLineEdit, self).__init__(contents, parent)
self.returnPressed.connect(self.checkText)
self._before = contents
def focusInEvent(self, event):
if event.reason() != QtCore.Qt.PopupFocusReason:
self._before = self.text()
super(MyLineEdit, self).focusInEvent(event)
def focusOutEvent(self, event):
if event.reason() != QtCore.Qt.PopupFocusReason:
self.checkText()
super(MyLineEdit, self).focusOutEvent(event)
def checkText(self):
if self._before != self.text():
self._before = self.text()
self.textModified.emit(self._before, self.text())
編集2
:手動で編集を捕捉するため
:)を開始、あなたは
editingFinished
信号とQLineEdit
のmodified
プロパティを使用することができます。例えば、行編集のコンテキストメニューが開かれているとシグナルが発せられます(おそらく 'event.reason()'をチェックする必要があります)。また、return/enterを押すとシグナル*は発火しないので、キーボードの処理が必要になります。 – ekhumoro@ echumoro:あなたはその問題について正しいです。私の答えを更新しました。 – Avaris
悪くないですが、たとえば? 'setText()'または 'clear()'は編集の間に呼び出されますか? – ekhumoro