禁止Matlab窗口焦点窃取

时间:2011-12-13 11:52:29

标签: matlab focus plot window-management

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

2 个答案:

答案 0 :(得分:41)

有可能,诀窍是不使用figure语句,而是直接更改当前数字。这将在不改变焦点的情况下更改活动图。通常我做这样的事情:

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

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

请注意,这包含在matlab documentation.

应该注意,这仅在已经创建了图形时才有效。如果要定期创建新的数字,可以创建数字作为前几行代码,保存句柄,进行处理,然后绘制到它们。这个例子可行。请注意,drawnow命令将刷新事件缓冲区,确保绘制所有数字。

我在2007年至2010年期间看过这项工作,不确定最新版本或早期版本是否支持此版本,但我没有理由怀疑它们不支持。

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

答案 1 :(得分:2)

我有同样的问题,代码创建数据的额外复杂性来自外部供应商,我不想修改它。以下是在Matlab 2014b上测试的两种可能性(在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. 创建一个新数字:

    figure
    
  2. 停靠它:

    enter image description here

    这会将图形放入Matlab IDE窗口。

  3. 将新数据停靠并运行代码:

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