在 MATLAB 中弹出菜单时刷新复选框中的值

Refresh value in checkbox upon popupmenu in MATLAB

我拥有的数据在 "checkbox1" 中称为 "fulldata",其中 X 和 Y 值位于数据矩阵中:

代码:

function popupmenu1_Callback(hObject, eventdata, handles)
function popupmenu1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function checkbox1_Callback(hObject, eventdata, handles)

fulldata=handles.fulldata;
x1=fulldata(:,1);
x2=fulldata(:,3);
x3=fulldata(:,5);
Y1=fulldata(:,2);
Y2=fulldata(:,4);
Y3=fulldata(:,6);

     contents = get(handles.popupmenu1,'String'); 
     popupmenu1value = contents{get(handles.popupmenu1,'Value')};
     switch popupmenu1value
        case 'plot1'
           plot(X1,Y1)
        case 'plot2'
           plot(X2,Y2)
        case 'plot3'
           plot(X3,Y3)
        end

取决于 popupmenu1 selection 我想在指定的地块上绘制。当我首先 select 弹出菜单中的值后跟复选框时,selection 工作正常。但是,如果我更改弹出菜单的值,我必须取消选中并重新选中复选框以刷新新的 selection。有没有一种方法可以在我更改弹出菜单值时自动刷新复选框功能,因此我不必取消选中并重新选中它?非常感谢...

是的。将您的绘图代码放入您以相同方式从两个回调调用的单独函数中可能是最简单的。它将使代码更简洁,更易于使用。

function popupmenu1_Callback(hObject, eventdata, handles)
    myPlotFcn(handles);    
end

function checkbox1_Callback(hObject, eventdata, handles)
    myPlotFcn(handles);    
end

function myPlotFcn(handles)
    isChecked = get(handles.checkbox1,'value');
    if(isChecked)
        contents = get(handles.popupmenu1,'String');
        popupmenu1value = contents{get(handles.popupmenu1,'Value')};
        switch popupmenu1value
            case 'plot1'
                plot(X1,Y1)
            case 'plot2'
                plot(X2,Y2)
            case 'plot3'
                plot(X3,Y3)
        end
    end
end

我不确定你从哪里得到你的 X1Y1,但如果你当前的代码正常工作,这应该会工作。

更新 如果你想用 myPlotFcn 控制多个复选框,那么你需要在同一个函数中为每个复选框添加逻辑。假设每个复选框都有不同的轴(例如 handles.axes1、handles.axes2)以及获取每种情况的 x、y 数据的方法,那么它可能如下所示:

function myPlotFcn(handles)
    is1Checked = get(handles.checkbox1,'value');
    if(is1Checked)
        contents = get(handles.popupmenu1,'String');
        popupmenu1value = contents{get(handles.popupmenu1,'Value')};
        switch popupmenu1value
            case 'plot1'
                plot(handles.axes1,X1,Y1)
            case 'plot2'
                plot(handles.axes1,X2,Y2)
            case 'plot3'
                plot(handles.axes1,X3,Y3)
        end
    end
    is2Checked = get(handles.checkbox2,'value');
    if(is2Checked)
        contents = get(handles.popupmenu1,'String');
        popupmenu1value = contents{get(handles.popupmenu1,'Value')};
        switch popupmenu1value
            case 'plot1'
                plot(handles.axes2,X1,Y1)
            case 'plot2'
                plot(handles.axes2,X2,Y2)
            case 'plot3'
                plot(handles.axes2,X3,Y3)
        end
    end
    % And so on for however many you have
end

你不能一遍又一遍地定义同一个函数,但是使用相同的名称,除非你把它变成一个嵌套函数(这意味着你需要添加 end 到你当前的所有函数(比如我在代码中有),然后在每个复选框#_Callback 函数中定义 myPlotFcn,在末尾。这很乱。