将 GUIDE GUI 小部件升级到最新的 Matlab 版本

Posted

技术标签:

【中文标题】将 GUIDE GUI 小部件升级到最新的 Matlab 版本【英文标题】:Upgrade GUIDE GUI widgets to latest Matlab version 【发布时间】:2016-03-17 14:59:22 【问题描述】:

我有一些在 Matlab 2010b 下使用 GUIDE 创建的 GUI。将 Matlab 升级到 2015b 后,我看到一些小部件现在具有不同的设计,并且我的旧 GUI 的外观不匹配。有什么方法可以升级 GUI 以具有与 2015b 兼容的外观?这是显示不匹配的小部件的屏幕截图。

我看到了一些升级脚本的参考资料,这些脚本可以为你做这件事,但我在官方 matlab 文档中没有看到任何参考资料。

【问题讨论】:

你说的是uicontrols的背景色吗? 【参考方案1】:

MATLAB 没有任何官方的方式来做到这一点。您看到的这种差异是由于版本之间的默认 uicontroluipanel BackgroundColor 属性存在差异。我在下面有一个脚本,它实际上可以加载到.fig 文件(使用 GUIDE 或其他方式创建)并用当前默认背景颜色换出uicontroluipanel 对象的BackgroundColors。然后它会重新保存.fig 文件,同时保留原始文件的备份。

function varargout = updatebgcolor(figfile)
    % updatebgcolor - Updates the uicontrol background colors
    %
    % USAGE:
    %   updatebgcolor(figfile)

    data = load(figfile, '-mat');

    % Types of controls to update
    types = 'uicontrol', 'uipanel';

    % Get the current default background color
    bgcolor = get(0, 'DefaultUIControlBackgroundColor');

    % Switch out all of the background colors
    data2 = updateBackgroundColor(data, types, bgcolor);

    % Resave the .fig file at the original location
    movefile(figfile, [figfile, '.bkup']);
    save(figfile, '-struct', 'data2')

    if nargout; varargout = data2; end
end

function S = updateBackgroundColor(S, types, bgcolor)

    % If this is not a struct, ignore it
    if ~isstruct(S); return; end

    % Handle when we have an array of structures
    % (call this function on each one)
    if numel(S) > 1
        S = arrayfun(@(s)updateBackgroundColor(s, types, bgcolor), S);
        return
    end

    % If this is a type we want to check and it has a backgroundcolor
    % specified, then update the stored value
    if isfield(S, 'type') && isfield(S, 'BackgroundColor') && ...
            ismember(S.type, types)
        S.BackgroundColor = bgcolor;
    end

    % Process all other fields of the structure recursively
    fields = fieldnames(S);
    for k = 1:numel(fields)
        S.(fieldsk) = updateBackgroundColor(S.(fieldsk), types, bgcolor);
    end
end

【讨论】:

我很惊讶没有本地方法可以做到这一点,因为任何更新 matlab 和维护 GUI 的人都会遇到这种情况。 @Fadecomic 我同意。虽然,当在两者之间移植 GUI 时,还有许多其他图形不一致实际上会导致问题,而这些问题实际上无法以自动化方式处理。这种颜色变化也不是万无一失的,因为它会撤消任何自定义背景颜色规范。

以上是关于将 GUIDE GUI 小部件升级到最新的 Matlab 版本的主要内容,如果未能解决你的问题,请参考以下文章

QT gui 项目不会缩小到其父小部件的 ft

如何将标准输出重定向到 Tkinter Text 小部件

将项目动态添加到列表小部件

将雷达图形集成到小部件中

从 Qt 中的文本文件填充表格小部件

如何为 Qt GUI 小部件使用图像