当窗口聚焦时,我可以执行代码吗(成为活动窗口,例如当窗口上方的窗口关闭时)?我希望windows只有焦点事件或属性,但似乎并非如此。
Qt中有焦点事件。如果Enaml不提供此功能,那么访问这些基础Qt事件的最简单方法是什么?
我希望能够做到这样的事情:
enamldef MyWindow(Window):
focus ::
do_stuff()
答案 0 :(得分: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/0f63b494345f2e03ce521adc2c38c6a0ce920266/enaml/widgets/widget.py#L300-L318
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