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

Posted

技术标签:

【中文标题】Mac 和 Windows 之间的 Matlab GUI 兼容性(显示)【英文标题】:Matlab GUI Compatibility Between Mac and Windows (Display) 【发布时间】:2013-11-19 12:25:12 【问题描述】:

一段时间以来,我一直致力于开发一系列 GUI。我使用运行 OSX 的 Mac 来编写我所有的代码,我遇到的问题是在 windows 中使用 GUI 时外观存在偏差,其中一些是次要的,而其中一些是非常重要的。

1) Windows 版本中的文本总体上要大得多。这会导致我的一些按钮标题从按钮上消失,或者面板标题超出了面板。

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

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

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

有没有办法解决这些问题?我认为设置一个指定的字体大小并允许使用默认字体可以解决这个问题,但它没有,而且我在这一点上有点枯燥。

【问题讨论】:

我假设您在 OS X 和 Windows 上使用相同版本的 Matlab?另外,你用的是什么字体? Helvetica 是 OS X 的默认设置,但我不确定 Windows 是否有它。这些东西从来都不是 Matlab 的强项。 是的,两者都是 Matlab 2012。 当我执行调试并检查正在生成的字体时,Windows 和 OSX 都使用了 Helvetica。即使我手动将字体设置为时间,显示仍然不同。 我建议你打破这个问题。提出我们可以运行的简单示例代码,以演示与您的使用相关的每个问题。 【参考方案1】:

尝试使用“像素”或绝对大小单位而不是“字符”,并将缩放因子应用于您的字体大小。

将“单位”设置为“字符”可能是为了便携性而采取的错误方法,并且可能是导致显示尺寸问题的主要原因。哪个特定的 Matlab 页面建议您这样做?是在谈论跨平台可移植性吗? characters 单位使用起来非常方便,但它与默认系统字体的字体规格相关联。 (请参阅http://www.mathworks.com/help/matlab/ref/axes_props.html 的 Units 属性文档)。这在不同的操作系统之间会有所不同。使用绝对的“像素”或英寸/厘米/点可能会给您在整个操作系统中提供更统一的结果。

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

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

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

【讨论】:

【参考方案2】:

我也遇到过这个问题。 在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 = afield1; %#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

【讨论】:

以上是关于Mac 和 Windows 之间的 Matlab GUI 兼容性(显示)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MAC OS MATLAB 读取在 windows MATLAB 中创建的 .mat 文件

如何让vnc界面和windows之间互相拷贝

如何在Mac和Windows PC之间无线共享文件

如何配置Mac OS X 与 Windows之间共享网络

text 在VirtualBox中在Mac和Windows之间共享文件夹

在 mac 和 windows 之间共享解决方案时对包的路径文件引用不正确