将 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 没有任何官方的方式来做到这一点。您看到的这种差异是由于版本之间的默认 uicontrol
和 uipanel
BackgroundColor
属性存在差异。我在下面有一个脚本,它实际上可以加载到.fig
文件(使用 GUIDE 或其他方式创建)并用当前默认背景颜色换出uicontrol
或uipanel
对象的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 版本的主要内容,如果未能解决你的问题,请参考以下文章