循环GUI功能

时间:2014-05-11 12:04:07

标签: matlab loops matlab-guide

我只想知道是否可以有效地循环GUI功能。

function Menu1_CreateFcn(hObject, ~, ~) % --- Executes during object creation, after setting all properties.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white'); % Set the background color to white
    end
    function Menu2_CreateFcn(hObject, ~, ~) % --- Executes during object creation, after setting all properties.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white'); % Set the background color to white
    end
    function Menu3_CreateFcn(hObject, ~, ~) % --- Executes during object creation, after setting all properties.
    % if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white'); % Set the background color to white
    end
    function Menu4_CreateFcn(hObject, ~, ~) % --- Executes during object creation, after setting all properties.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white'); % Set the background color to white
    end

目前我有:

HandleNames = {'Menu1','Menu2','Menu3','Menu4'};
for d = 1:4   
    eval('function (HandleNames{d})_Callback(~, ~, ~)');
    eval('function (HandleNames{d})_CreateFcn(hObject, ~, ~)');
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white'); % Set the background color to white
    end
end

但我很清楚eval函数不是很好的做法,它在命令窗口中抛出一些错误,但仍然像以前一样运行。有没有更优雅的方式来做这件事,或者只是我必须处理的事情,干杯。

1 个答案:

答案 0 :(得分:1)

啊,我看到你正在使用GUIDE。它是一个简单的,丢弃GUI的好工具,但是一旦你尝试做任何整洁的事情,你就会超越它的限制。幸运的是,这是一个更好的方法。您需要使用programmatic GUI函数部分或全部构建GUI。因此,对于您感兴趣的特定任务,请尝试以下方法:

menuSet = {'Hi', 'This is a menu', 'and another', 'neat, huh?'};
for menuIndex = 1:numel(menuSet)
    menuHandle = uimenu(fh,'Label', menuSet{menuIndex);
    % You can use menuHandle here, to manipulate any of the menus
    % properties, or add a sub-menu!
end

您还可以添加子菜单,分配上下文以及其他所有有趣的内容。我知道这是一个学习曲线,但如果您打算将MATLAB用于任何严肃的GUI应用程序,我强烈建议您学习所有程序化GUI功能,其中uimenu只是一个。祝你好运!