代码之家  ›  专栏  ›  技术社区  ›  Image Check

在GUI-MATLAB中如何在不同函数中使用同一变量

  •  0
  • Image Check  · 技术社区  · 6 年前

    我有一个带有以下代码的弹出菜单。有两个选项,C1和C2。如果用户选择C1,我想设置值为10,如果用户选择C2,我想设置值为20。

    function pop_Callback(hObject, eventdata, handles)
    
    contents = cellstr(get(hobject,'String'));
    A = contents{get(hObject,'Value')};
    if (strcmp(A,'C1'))
        X = 10;
    elseif (strcmp(A,'C2'))
        X = 20;
    end
    set(handles.pop,X)
    

    我想使用另一个带有按钮和静态文本的函数来显示答案,无论设置值+12是什么,输出是什么。

    function push_Callback(hObject, eventdata, handles)
    
    inX = get(handles.pop,X);
    out = inX + 12;
    set(handles.ans,'String',out)
    

    然而,我在set和get函数中有一些错误,因此我遇到了麻烦。请帮忙。

    2 回复  |  直到 6 年前
        1
  •  1
  •   JSchmitty    6 年前

    为了避免使用globals,可以使用figure窗口的UserData属性(假设uiobjects是同一个图的子对象)。例如:

    function pop_Callback(hObject, eventdata, handles)
    
    % ...
    
    set( ancestor(hObject,'figure'), 'UserData', X )
    

    function push_Callback(hObject, eventdata, handles)
    
    inX = get( ancestor(hObject,'figure'), 'UserData' );
    out = inX + 12;
    set(handles.ans,'String',out)
    
        2
  •  0
  •   Rijo Kuriakose    6 年前

    可能你可以尝试全局变量

    function pop_Callback(hObject, eventdata, handles)
    global X;
    contents = cellstr(get(hobject,'String'));
    A = contents{get(hObject,'Value')};
    if (strcmp(A,'C1'))
    X = 10;
    elseif (strcmp(A,'C2'))  
    X = 20;
    set(handles.pop,X)
    end
    

    并在任何函数中使用同一行代码global X;无论您想在何处使用变量X。

    function push_Callback(hObject, eventdata, handles)
    global X;
    out = X + 12;
    set(handles.ans,'String',out)
    

    在任何函数中,对X值的任何更改都对声明它为全局值的所有函数可见。