【问题标题】:matlab uicontrol radiobutton issuematlab uicontrol单选按钮问题
【发布时间】:2014-05-15 11:07:34
【问题描述】:

我有一个使用 imagesc 完成的 2d 绘图(hhh 句柄),如果按下单选按钮,我想在其中添加一条线,如果释放按钮,则删除相同的留置权。

当按钮被按下时,该行显示 OK,但是如果按钮被释放,则会出现以下错误:

未定义的函数或变量'Hline'

程序无法记住 Hline 值,即使它正在使用 guidata 进行更新。我究竟做错了什么?谢谢

这里是函数

function  abc(x)
% x is a m x n matrix
hhh=imagesc(x)

% now a pushbutton to put or remove a line in the above plot

uicontrol('Style','radiobutton','String','put_remove_line',...
    'units','normalized','pos', [tf_left 0 .1/2 1/25],'parent',hhh,'HandleVisibility','on', 'fontSize',6,'Callback',{@put_remove_line ,delta_f_line, hhh ,Hline});

end % end abc function
%radiobutton callback function

function put_remove_line(hObject,event,delta_f_line,hhh,Hline)

        a=get(hObject,'Value');
        if a % if button is pressed a 
                axes(hhh)
                xlimits=get(gca,'XLim');
                Hline.xxx=line(xlimits,[delta_f_line], 'LineStyle',':','LineWidth',2);

        else
            delete(Hline.xxx,)
        end
guidata(hObject,Hline)
end

【问题讨论】:

    标签: matlab matlab-guide uicontrol


    【解决方案1】:

    来自documentation 的回调:

    如果你定义了额外的输入参数,那么你传递给的值 当最终用户触发时,回调必须存在于工作区中 回调。

    正如所写,当执行uicontrol() 时,您的函数只会传递存在于 abc(x) 范围内的 Hline 的值。您收到一个错误,因为它没有定义,因此是Undefined function or variable 'Hline'。为了解决这个问题,改为使用你现有的guidata存储方法来检索put_remove_line()开头的Hline。

    假设 Hline 存储在您的guidata

    function  abc(x)
    % x is a m x n matrix
    hhh = figure
    hhh2 = imagesc(x)
    
    % now a pushbutton to put or remove a line in the above plot
    
    uicontrol('Style','radiobutton','String','put_remove_line',...
        'units','normalized','pos', [tf_left 0 .1/2 1/25],'parent',hhh,'HandleVisibility','on', 'fontSize',6,'Callback',{@put_remove_line ,delta_f_line, hhh});
    
    end % end abc function
    %radiobutton callback function
    
    function put_remove_line(hObject,event,delta_f_line,hhh)
    
            Hline = guidata(hObject)
            a=get(hObject,'Value');
            if a % if button is pressed a 
                    axes(hhh)
                    xlimits=get(gca,'XLim');
                    Hline.xxx=line(xlimits,[delta_f_line], 'LineStyle',':','LineWidth',2);
    
            else
                delete(Hline.xxx)
            end
    guidata(hObject,Hline)
    end
    

    编辑:我刚刚意识到有关您的代码的其他内容。一旦你解决了 Hline 错误,你会得到另一个错误:

    Error using uicontrol
    An object of class uicontrol, can not be a child of class image.
    

    这是因为您将 hhh 定义为不能有子级的图像。为了解决这个错误,我对代码进行了另一次修改,只是打开了一个图形窗口作为父对象。

    【讨论】:

    • 非常感谢,我会看看这个,暂时我们使用 global xxx 这看起来不是最好的解决方案......
    猜你喜欢
    • 2014-12-30
    • 2015-12-25
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多