禁止Matlab窗口焦点窃取

有没有办法告诉Matlab 不要在窗口焦点(如外部编辑器)(如Emacs)上通过graphics命令( figureplot )来窃取窗口焦点。 这会提高我的工作效率,因为我经常想在数据(重新)处理过程中继续进行代码开发。

这是可能的,诀窍是不使用数字声明,而是直接改变当前数字。 这将改变活动情节而不改变焦点。 通常我会这样做:

 function change_current_figure(h) set(0,'CurrentFigure',h) 

然后,所有的图(h)语句都需要更改为change_curent_figure(h)。

请注意,这包含在matlab文档中。

应该指出的是,这只有在数字已经被创build时才有效。 如果要定期创build新数字,可以将数字作为前几行代码,保存句柄,进行处理,然后对其进行绘图。 这个例子可以工作。 请注意,drawnow命令将刷新事件缓冲区,确保绘制所有graphics。

我从2007 – 2010年看过这个工作,不知道最新版本还是早期版本支持这个,尽pipe我没有理由怀疑他们没有。

 fig1=figure; fig2=figure; drawnow; [ab]=do_complex_processing; change_current_figure(fig1) plot(a); change_current_figure(fig2) plot(b); 

我也遇到了同样的问题,代码创build数据来自外部供应商的额外复杂性,我不想修改它。 以下是在Matlab 2014b上testing的两种可能性(在MathWorks支持的帮助下确定):

1.生成数字而不显示它们,然后在代码完成后显示它们

 set(0, 'DefaultFigureVisible', 'off'); for i = 1:10 fprintf('i: %g\n', i) figure; pause(1); end set(0, 'DefaultFigureVisible', 'on'); figHandles = findall(0, 'Type', 'figure'); set(figHandles(:), 'visible', 'on') 

这段代码确实需要什么,但是增加的不便之处在于,你看不到代码运行的任何进度,因此如果发生错误,不能中断长时间运行。

2.停靠数字

  1. 创build一个新的数字:

     figure 
  2. 停靠吧:

    在这里输入图像说明

    这将把graphics放入Matlab IDE窗口。

  3. 使新的数字停靠并运行代码:

     set(0, 'DefaultFigureWindowStyle', 'docked'); for i = 1:10 fprintf('i: %g\n', i) figure; pause(1); end set(0, 'DefaultFigureWindowStyle', 'normal');