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/focus_tracker.py

要处理对特定小部件的关注,您需要启用功能标志并重新实现处理程序函数: 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/0f63b494345f2e03ce521adc2c38c6a00ce920216.py#Lwidgets/Lwidgets86/enaml

enamldef MyWindow(Window):
    Field:
        features = Feature.FocusEvents
        focus_gained => ():
            print 'got focus'
        focus_lost => ():
            print 'lost focus'

该代码位于功能标志后面,因为后端所需的工作非常重要,并且我们不想在不需要时执行该工作。

没有任何焦点处理示例,但这里有一些使用声明性函数和其他“隐藏”功能(如拖放)的示例: https: //github.com/nucleic/enaml/tree/0f63b494345f2e03ce521adc2c38c6a0ce920266/examples/functions https ://github.com/nucleic/enaml/blob/0f63b494345f2e03ce521adc2c38c6a0ce920266/examples/widgets/drag_and_drop.enaml

于 2016-06-22T14:36:21.130 回答