Mac和Windows之间的Matlab GUI兼容性(显示)

时间:2013-11-07 17:49:16

标签: windows macos matlab user-interface compatibility

一段时间以来,我一直在研究一系列GUI。我使用运行OSX的Mac来编写我的所有代码,我遇到的问题是,当在Windows中使用GUI时,外观上存在偏差,其中一些是次要的,其中一些非常重要。

1)Windows版本中的文本总体上要大得多。这导致我的一些按钮标题只是关闭按钮,或者面板标题移出面板。

2)在Mac和Windows之间,轴似乎是不同的尺寸。即在我的Mac上显示为方形的轴在窗口上显示为细长或矩形,反之亦然。

3)图形显示不同。这是真正的问题。我的一些GUI使用轴来显示文本和模型化学反应动画。在Mac上,它们看起来非常好,但在Windows系统上,尺寸完全没有。

我已按照Mathworks帮助页面的建议将所有“单位”设置为“字符”,并且我没有指定任何字体以允许每个系统使用其默认值。但是,我指定了字体大小,但显然,Windows上的12点字体与Mac上的12点字体非常不同。

有没有解决这些问题的方法?我认为设置一个指定的字体大小并允许使用默认字体会解决这个问题,但事实并非如此,而且此时我的想法有点干。

2 个答案:

答案 0 :(得分:0)

尝试使用'像素'或绝对大小单位而不是'字符',并将缩放系数应用于字体大小。

将“单位”设置为“字符”可能是错误的便携性方式,可能是导致显示尺寸问题的主要原因。哪个具体的Matlab页面建议您这样做?它是在谈论跨平台的可移植性吗? characters单元使用起来非常方便,但它与默认系统字体的字体指标相关联。 (参见http://www.mathworks.com/help/matlab/ref/axes_props.html处的doco for Units属性)。这在不同的操作系统之间会有所不同。使用“像素”或英寸/厘米/点(绝对值)可能会在操作系统中为您提供更均匀的结果。

你并没有错:OS X倾向于在比Windows更小的屏幕上显示给定大小的字体。 (通常; YMMV取决于您的显示器DPI和系统设置等。)例如,我在Windows中以10或12点运行终端和文本编辑器,但在Mac上运行14点或更大。因此,将缩放因子应用于您在GUI中设置的字体大小。找出Mac上看起来不错的东西,然后在代码中将其缩放到类似windows_font_size = floor(mac_font_size * 0.8)的内容,看看它是怎么回事。

如果您想要更精确地进行缩放,可以使用ScreenPixelsPerInch获取ScreenSizeget(0,...)根属性。您也可以调用Java代码来获取精确的字体度量信息,以帮助进行字体缩放选择。

无论哪种方式,您都必须在两个系统上测试您的代码,而不是仅仅期望它可以移植。如果您没有准备好访问Windows开发系统,请考虑在Mac上设置Windows VM。通过双方之间的文件共享,您可以在使用它时在两个平台上尝试使用代码。

答案 1 :(得分:0)

我也遇到了这个问题。 在FUNCTIONNAME_OpeningFcn内调用此功能可能会缓解您的问题:

function decreaseFontSizesIfReq(handles)
% make all fonts smaller on a non-mac-osx computer
persistent fontSizeDecreased
fontSizeDecreased = [];
if ~ismac()
    % No MAC OSX detected; decrease font sizes
    if isempty(fontSizeDecreased)
        for afield = fieldnames(handles)'
            afield = afield{1}; %#ok<FXSET>
            try %#ok<TRYNC>
                set(handles.(afield),'FontSize',get(handles.(afield),'FontSize')*0.75); % decrease font size
            end
        end
        fontSizeDecreased=1; % do not perform this step again.
    end
end