web-dev-qa-db-ja.com

Matlabウィンドウフォーカススティーリングの禁止

figureplotなどのグラフィカルコマンドでMatlab notにウィンドウフォーカスを(Emacsなどの外部エディターから)盗むように指示する方法はありますか。データ(再)処理中にコード開発を継続したい場合が多いため、これにより私の生産性が大幅に向上します。

49
Nordlöw

可能性があります。トリックは、figureステートメントを使用せずに、現在のFigureを直接変更することです。これにより、フォーカスを変更せずにアクティブなプロットが変更されます。通常、私はこのようなことをします:

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

次に、すべてのfigure(h)ステートメントをchange_curent_figure(h)に変更する必要があります。

これは matlabのドキュメントに含まれています。

これは、フィギュアがすでに作成されている場合にのみ機能することに注意してください。新しいFigureが定期的に作成される場合は、最初の数行のコードとしてFigureを作成し、ハンドルを保存して、処理を行ってから、それらにプロットできます。この例はうまくいきます。 drawnowコマンドはイベントバッファーをフラッシュし、すべてのFigureが確実にプロットされることに注意してください。

私は2007年から2010年にかけてこの作品を見てきましたが、最新バージョンまたは以前のバージョンがこれをサポートしているかどうかはわかりませんが、サポートしていないと疑う理由はありません。

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

同じ質問がありますが、図を作成するコードが外部のサプライヤーからのものであるという複雑さがあるため、変更したくありませんでした。以下は、Matlab 2014bでテストされた2つの可能性(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');
    
3
texnic