Есть ли способ сказать Matlab не украсть фокус окна (из внешнего редактора), такой как Emacs) при графических командах, таких как figure
и plot
. Это значительно увеличило бы мою производительность, потому что я часто хочу продолжить разработку кода во время обработки данных (повторной).
Запрет кражи окон Matlab
Ответ 1
Возможно, трюк заключается в том, чтобы не использовать оператор цифры, а напрямую изменять текущий показатель. Это изменит активный график без изменения фокуса. Обычно я делаю что-то вроде этого:
function change_current_figure(h)
set(0,'CurrentFigure',h)
Затем все операторы рисунка (h) необходимо изменить на change_curent_figure (h).
Примечание. Это включено в документацию matlab.
Следует отметить, что это работает только в том случае, если фигура уже создана. Если новые цифры будут периодически создаваться, можно создать цифры как самые первые строки кода, сохранить дескрипторы, обработать, а затем зарисовать их. Этот пример будет работать. Обратите внимание: команда drawow очистит буфер событий, убедившись, что все фигуры нанесены на график.
Я видел эту работу с 2007 по 2010 год, не уверен, поддерживают ли ее последние или более ранние версии, хотя у меня нет причин подозревать, что они этого не делают.
fig1=figure;
fig2=figure;
drawnow;
[a b]=do_complex_processing;
change_current_figure(fig1)
plot(a);
change_current_figure(fig2)
plot(b);
Ответ 2
У меня есть тот же вопрос, с дополнительной сложностью, что код, создающий цифры, пришел от внешнего поставщика, и я не хотел его изменять. Вот две возможности (идентифицированные с помощью поддержки MathWorks), протестированные на Matlab 2014b:
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. Подсоедините цифры
Ответ 3
В R2018a было введено свойство рисунка "WindowState", см. Https://blogs.mathworks.com/pick/2018/07/13/maximize-your-figures/
Используя это, вы можете сделать
set(0, 'DefaultFigureWindowState', 'minimized');
перед запуском фактического сценария, и это приведет к тому, что все "стандартные графики" не украдут фокус и будут открыты в свернутом состоянии.
Есть функции, которые все еще крадут фокус. Я не исследовал подробно, но я считаю, что это в основном автоматические функции построения графиков, такие как psd, hist и т.д. Без выходных аргументов. Если вы называете plot
сами, все будет в порядке.