ウィンドウがフォーカスされたときにコードを実行することはできますか? ウィンドウがフォーカスイベントまたは属性を持つことを望んでいましたが、そうではないようです。
Qtにはフォーカスイベントがあります。Enaml がこれを提供しない場合、これらの基になる Qt イベントにアクセスする最も簡単な方法は何ですか?
次のようなことができるようになりたいです。
enamldef MyWindow(Window):
focus ::
do_stuff()
どのウィジェットにフォーカスがあるかだけを追跡したい場合は、FocusTracker
オブジェクトを使用できます。このインスタンスを任意の場所に作成し、focused_widget
属性に反応するだけです:
特定のウィジェットへのフォーカスを処理するには、機能フラグを有効にしてハンドラー関数を再実装する必要があります: https://github.com/nucleic/enaml/blob/0f63b494345f2e03ce521adc2c38c6a0ce920266/enaml/widgets/widget.py#L88 https:// github.com/nucleic/enaml/blob/0f63b494345f2e03ce521adc2c38c6a0ce920266/enaml/widgets/widget.py#L133 https://github.com/nucleic/enaml/blob/0f63b494345f2e03ce521adc2c38c6a0ce920266/enaml/widgets/widget.py#L300-L318
enamldef MyWindow(Window):
Field:
features = Feature.FocusEvents
focus_gained => ():
print 'got focus'
focus_lost => ():
print 'lost focus'
バックエンドに必要な作業は簡単ではないため、コードは機能フラグの背後にあり、必要でない場合はその作業を行いたくありません。
フォーカス処理の例はありませんが、宣言型関数やドラッグ アンド ドロップなどのその他の「隠し」機能を使用する例を次に示し ます 。 ://github.com/nucleic/enaml/blob/0f63b494345f2e03ce521adc2c38c6a0ce920266/examples/widgets/drag_and_drop.enaml