1

ウィンドウがフォーカスされたときにコードを実行することはできますか? ウィンドウがフォーカスイベントまたは属性を持つことを望んでいましたが、そうではないようです。

Qtにはフォーカスイベントがあります。Enaml がこれを提供しない場合、これらの基になる Qt イベントにアクセスする最も簡単な方法は何ですか?

次のようなことができるようになりたいです。

enamldef MyWindow(Window):
    focus ::
        do_stuff()
4

1 に答える 1

1

どのウィジェットにフォーカスがあるかだけを追跡したい場合は、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

于 2016-06-22T14:36:21.130 に答える