当一个窗口成为焦点(成为活动窗口,例如当它上面的窗口关闭时),我可以执行代码吗?我希望windows只有焦点事件或属性,但事实似乎并非如此。
Qt中有焦点事件。如果Enaml不提供此功能,那么访问这些底层Qt事件的最简单方法是什么?
我希望能够做一些如下的事情:
enamldef MyWindow(Window):
focus ::
do_stuff()发布于 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
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
https://stackoverflow.com/questions/37947616
复制相似问题