Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在MATLAB中创建动态回调?

我有这行代码:

delete_btn = uicontrol(rr_ops, 'Style', 'pushbutton', 'String', 'Delete Graphic', 'Position', [13 135 98 20], ... 'Callback', 'delete_graphic'); 并在此功能的上方:

function delete_graphic global rr_list selected = get(rr_list, 'Value'); selected return; 为什么此代码不起作用?我真的不明白...

我需要什么?我创建一个按钮和一个列表框,然后单击按钮-从列表框中删除选定的元素。

谢谢。

PS总是出现此错误:

??? Undefined function or variable 'delete_graphic'. ??? Error while evaluating uicontrol Callback 这是我的所有代码: http : //paste.ubuntu.com/540094/ (第185行)



回答:

通常, 定义回调函数的方法是使用函数句柄而不是字符串。使用字符串时,将在基本工作区中评估字符串中的代码。这意味着在评估回调时,字符串中使用的所有变量和函数都必须存在于基本工作空间中。这会导致GUI设计不佳,因为您实际上并不希望GUI的操作依赖于基本工作空间(用户可以轻松地对其进行修改,从而有可能破坏您的GUI)。

这也解释了您遇到的错误。函数delete_graphic在文件rr_intervals.m定义为子函数 。子函数只能由同一m文件中定义的其他函数调用,因此delete_graphic在基本工作空间(评估字符串回调的位置)中不可见。使用函数句柄回调是更好的选择。这是您的处理方式:
  • 将按钮的回调(第216行)从'delete_graphic'更改为@delete_graphic 。
  • 将delete_graphic的函数定义(第185行)更改为:

    function delete_graphic(hObject,eventdata) 其中hObject是发出回调的对象的句柄,而eventdata是发出回调时提供的可选数据。
编辑:

如果要将其他参数传递给delete_graphic ,则可以执行以下步骤:
  • 将其他输入参数添加到函数定义的末尾。例如:

    function delete_graphic(hObject,eventdata,argA,argB)
  • 在为按钮设置回调时,使用单元格数组,其中第一个单元格包含函数句柄,随后的每个单元格均包含输入参数。例如:

    set(delete_btn,'Callback',{@delete_graphic,A,B}); 需要注意的是,存储在单元格数组中的值A和B 固定为设置回调时的值 。如果您在代码中更改A或B , 则不会更改存储在单元格数组回调中的值。
如果您无法使用上述解决方案(例如,如果A和B需要更改值),那么还有一些其他选项可用于在GUI的回调之间共享数据
  • 您可以重新设计代码的组织,以利用嵌套函数 。这使得在回调之间共享数据非常容易。在StevenMathWorks File Exchange提交的使用嵌套函数GUI示例中可以找到一些使用嵌套函数创建GUI的不错示例。
  • 您可以将数据存储在uicontrol对象的UserData属性中。要访问或更新它,您只需要对象句柄。
  • 您可以使用功能SETAPPDATA / GETAPPDATA将数据附加到句柄图形对象(即uicontrol)。
  • 由于看起来您的代码是使用GUIDE创建的,因此可以使用GUIDE创建的handles结构来使用GUIDATA函数存储数据。

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 20:34


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.