【问题标题】:Error when calling local variable in GUI MATLAB在 GUI MATLAB 中调用局部变量时出错
【发布时间】:2010-05-27 21:52:20
【问题描述】:

我收到此错误:

Error in ==> APP>pushbutton2_Callback at 109
img=imread(FileName)

当我尝试在pushbutton2_Callback 中使用FileName 时,我收到了提到的错误

FileNamepushbutton1_Callback 中是可变的。

【问题讨论】:

    标签: matlab user-interface image-processing callback matlab-guide


    【解决方案1】:

    您需要将变量FileName 从一个回调传递给另一个。为此,您可以将变量分配给pushbutton1'UserData' 字段。 pushbutton1_Callback 下的代码应类似于:

    FileName=uigetfile();
    set(handles.pushbutton1,'UserData',FileName);
    

    接下来,你需要读入你pushbutton2_Callback下的变量:

    FileName=get(handles.pushbutton1,'UserData');
    img=imread(FileName);
    

    如果你想检查你的结果,你总是可以把分号放在行尾。

    【讨论】:

      【解决方案2】:

      有一种通用的方法可以在您的 gui 中存储数据,以便在回调之间使用。您可以向句柄对象添加任意字段,因此您可以放入您的 pushbutton1 回调

      handles.filename = FileName;
      guidata(hObject,handles); 
      

      第二行是样板代码,您需要将其放在更改句柄结构中值的任何回调的末尾。

      现在您的所有回调都可以访问文件名。在您的具体情况下,在回调 2 中,您将拥有

      img = imread(handles.filename);
      

      当然,您可能希望稍后在另一个函数中使用此图像,因此您也可以将其存储在句柄中

      handles.img = img;
      guidata(hObject, handles);
      

      【讨论】:

      • 您可以使用 setappdata 和 getappdata 有效地做同样的事情,而无需记住 guidata 位。
      • 但是你必须知道图形手柄,对吧?我猜你可以调用 gcf,但是如果用户在你的回调执行之前最大化另一个窗口,你就会遇到问题。无论如何,我更喜欢点引用符号。
      猜你喜欢
      • 2013-05-06
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 2019-07-08
      • 2014-10-27
      相关资源
      最近更新 更多