当窗口成为焦点时(成为活动窗口,例如当它上面的窗口关闭时),我可以执行代码吗?我希望窗口只有焦点事件或属性,但似乎并非如此。
Qt 中有焦点事件。如果 Enaml 不提供此功能,那么访问这些底层 Qt 事件的最简单方法是什么?
我希望能够做类似的事情:
enamldef MyWindow(Window):
focus ::
do_stuff()
如果您只想跟踪哪个小部件具有焦点,则可以使用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