如何控制显示哪些监视器图?

LGT*_*der 2 matlab multiple-monitors matlab-figure

我有一个运行 MATLAB 的 3 显示器 Gentoo Linux 系统。MATLAB 在中央显示器上运行。我需要 MATLAB 在左侧监视器上生成绘图,但它总是在右侧监视器上绘图。

我相信这至少部分是由于我对显示器进行物理排列的非标准方式造成的 - 基本上是 2,3,1:

>> get(0,'MonitorPositions')

ans =

           1           1        1920        1080
       -3839           1        1920        1080
       -1919           1        1920        1080
Run Code Online (Sandbox Code Playgroud)

有没有办法可以在 MATLAB 中将其默认控制?

gno*_*ice 5

您可以在根对象上设置默认图形位置,如下所示:

set(0, 'DefaultFigurePosition', [-3839 1 1920 1080]);
Run Code Online (Sandbox Code Playgroud)

默认情况下,这将创建填充左侧显示器的窗口。startup但是,每次重新启动 MATLAB 时,此默认值可能会重置,因此如果您希望它在会话之间持续存在,则必须将其放入文件中。

注意:根对象属性的文档'MonitorPositions'是这样说的:

每行的前两个元素指示相对于原点的显示位置。每行的最后两个元素表示显示大小。原点是主显示屏的左下角。

如果更改用作主显示器的显示器,左侧两列中的相对坐标将会更改,这意味着您必须更改上面代码行中的位置值。如果您认为显示设置可能经常更改,或者您将在不同的监视器设置上运行代码,那么您可以通过在左列中查找具有最低值的监视器位置来确保绘图始终出现在最左侧的监视器上。以下是您可以执行此操作的方法(还包含先前的默认窗口大小和监视器内的位置):

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