首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Enaml中捕获事件中的窗口焦点

在Enaml中捕获事件中的窗口焦点
EN

Stack Overflow用户
提问于 2016-06-21 22:44:59
回答 1查看 325关注 0票数 1

当一个窗口成为焦点(成为活动窗口,例如当它上面的窗口关闭时),我可以执行代码吗?我希望windows只有焦点事件或属性,但事实似乎并非如此。

Qt中有焦点事件。如果Enaml不提供此功能,那么访问这些底层Qt事件的最简单方法是什么?

我希望能够做一些如下的事情:

代码语言:javascript
复制
enamldef MyWindow(Window):
    focus ::
        do_stuff()
EN

回答 1

Stack Overflow用户

发布于 2016-06-22 22:36:21

如果您只想跟踪哪个小部件具有焦点,则可以使用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/0f63b494345f2e03ce521adc2c38c6a0ce920266/enaml/widgets/widget.py#L300-L318

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37947616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档