2016-05-27 11 views
0
class MyWindow(): 

    class Filter(QtCore.QObject) : 

     def eventFilter(self, widget, event):       
      return event.type() == QtCore.QEvent.FocusOut 

    def __init__(self, ui) : 
     self.ui = ui 

    def mycode (self) : 
     myvalue = float(self.ui.myvalueEdit.text()) 
     self._filter = self.Filter()  
     print (self.ui.myvalueEdit.installEventFilter(self._filter)) 

私はfocusEventを傍受しようとしています、それは私がそれが変わることを知っていれば十分です。このコードでは、eventFilterの戻り値を読み取ろうとしていますが、常にNoneの値が返されます。pythonなし値返す

+0

'eventFilter'ではなく、' installEventFilter'の戻り値を表示しています。 – user2357112

+0

なぜ '.installEventFilter'(最後の行)の戻り値を表示しようとしていますか?何も期待してはいけません。代わりに 'def eventFilter(..)'の中にprintステートメントを置いてください。 – SuperSaiyan

+0

質問は明確ではありません。私は彼が 'eventFilter'と' installEventFilter'を間違えているとは思わないが、彼らは同じクラスのメソッドではないようだ...しかしもしそうなら、彼の問題がある。 – Thrastylon

答えて

1

メソッドinstallEventFilterは何も返さないため、Noneを取得しています。 eventFilterメソッドは、イベントが発生したときに呼び出されるコールバックです。

eventFilterの戻り値は、イベントを処理したかどうかを示すものとします。つまり、他のオブジェクトが問題のイベントを処理しないようにするには、Trueを返します。だからこそ、あなたは真実を返すことはできません、それはイベントを消費するでしょう、あなたは真実を返すあなた自身のイベントを処理しなければなりません。

class MyWindow(QtCore.QObject): 

    def eventFilter(self, widget, event):       
     if event.type() == QtCore.QEvent.FocusOut or event.type() == QtCore.QEvent.FocusIn: 
      print("Focus Changed!") 
      print("Value I want to save is: " + widget.toPlainText()) 
      # Put the code you want to do here! 
      return True 
     return False 

    def __init__(self, ui) : 
     self.ui = ui 

    def mycode (self) : 
     myvalue = float(self.ui.myvalueEdit.text()) 
     self.ui.myvalueEdit.installEventFilter(self) 
+0

いくつかの.ui値を保存する必要があるので、フォーカスの状態を確認したいと思います。この場合、解決策はprint( "focus")コードをreturn(?)として変更する必要があります – Mixo

+0

ウィジェットにフォーカスがあるかどうかを確認しようとしているだけの場合は、このようなメソッドhasFocusを使用できます。 (self.ui.myvalueEdit.hasFocus()) 'アイテムがフォーカスを取得したときにコードを実行しようとしている場合は、あなたが行ったようなイベントフィルタが必要です。 –

+0

基本的に、何をしようとしていますか?要素にフォーカスがあるかどうかをチェックして何かをしようとしていますか?または、要素がフォーカスを得るたびに何かをしようとしていますか? –

関連する問題