2016-12-07 2 views
2

У меня есть 3-х мониторная система Gentoo Linux, работающая под управлением MATLAB. MATLAB работает на центральном мониторе. Мне нужен MATLAB для создания графиков на левом мониторе, но он всегда отображается на правом мониторе.Как я могу контролировать, на каких мониторах отображаются изображения?

Я считаю, что это, по крайней мере, частично вызвана нестандартным способом я мои мониторы расположены физически - по существу 2,3,1:

>> get(0,'MonitorPositions') 

ans = 

      1   1  1920  1080 
     -3839   1  1920  1080 
     -1919   1  1920  1080 

Есть ли способ, что я могу контролировать это по умолчанию внутри MATLAB?

ответ

4

Вы можете set the default figure position на root object как так:

set(0, 'DefaultFigurePosition', [-3839 1 1920 1080]); 

Это создаст окна, заполняющие левый монитор по умолчанию. Тем не менее, это значение по умолчанию, вероятно, будет сбрасываться при каждом перезапуске MATLAB, поэтому вам нужно будет поместить его в свой файл startup, если вы хотите, чтобы он сохранялся с сеанса на сеанс.

Примечание:documentation for the 'MonitorPositions' property корневого объекта говорит, что это:

Первые два элемента в каждой строке указывают расположение дисплея по отношению к исходной точке. Последние два элемента в каждой строке указывают размер дисплея. Точкой начала является нижний левый угол основного дисплея.

Если вы меняете, какой монитор используется в качестве основного дисплея, то относительные координаты в двух столбцах будут меняться, то есть вам придется изменить значение позиции в приведенной выше строке кода. Если вы считаете, что настройка дисплея может часто меняться, или вы будете запускать код на разных настройках монитора, то вы можете обеспечить, чтобы графики всегда отображались на самом левом мониторе, ища положение монитора с самым низким значением в левом столбце. Вот как вы могли это сделать (также включая предыдущий размер и положение окна по умолчанию в мониторе):

monitorPos = get(0, 'MonitorPositions'); 
figurePos = get(0, 'DefaultFigurePosition'); 
[~, leftIndex] = min(monitorPos(:, 1)); 
set(0, 'DefaultFigurePosition', figurePos + [monitorPos(leftIndex, 1:2)-1 0 0]); 
+1

Отличное объяснение и прекрасно работает. Я немного изменю его, поскольку команда monitorPos (leftIndex, :) возвращает значения, которые создают окно, в котором используется весь левый монитор, и старые размеры по умолчанию, которые я получил, но это решение отлично. Благодаря! – LGTrader

+0

@LGTrader: Хорошая точка. Я упустил из виду, что это сделает окно размером с монитор. Я обновлю лучшее решение. – gnovice

+0

Добавление к случаю изменения настроек мониторов работает только в том случае, если все мониторы имеют одинаковый размер. – Adiel

Смежные вопросы