![]() |
如何在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 这是我的所有代码: [URL="http://paste.ubuntu.com/540094/"]http[/URL] : [URL="http://paste.ubuntu.com/540094/"]//paste.ubuntu.com/540094/[/URL] (第185行) [B]回答:[/B] 通常, [URL="http://www.mathworks.com/help/techdoc/creating_guis/f16-999606.html"]定义回调函数的方法[/URL]是使用[URL="http://www.mathworks.com/help/techdoc/matlab_prog/f2-38133.html"]函数句柄[/URL]而不是字符串。使用字符串时,将[I]在基本工作区中[/I]评估字符串中的代码。这意味着在评估回调时,字符串中使用的所有变量和函数都必须存在于基本工作空间中。这会导致GUI设计不佳,因为您实际上并不希望GUI的操作依赖于基本工作空间(用户可以轻松地对其进行修改,从而有可能破坏您的GUI)。 这也解释了您遇到的错误。函数delete_graphic在文件rr_intervals.m定义为[URL="http://www.mathworks.com/help/techdoc/matlab_prog/f4-70666.html"]子函数[/URL] 。子函数只能由同一m文件中定义的其他函数调用,因此delete_graphic在基本工作空间(评估字符串回调的位置)中不可见。使用函数句柄回调是更好的选择。这是您的处理方式: [LIST][*]将按钮的回调(第216行)从'delete_graphic'更改为@delete_graphic 。[*]将delete_graphic的函数定义(第185行)更改为: function delete_graphic(hObject,eventdata) 其中hObject是发出回调的对象的句柄,而eventdata是发出回调时提供的可选数据。 [/LIST][B]编辑:[/B] 如果要将其他参数传递给delete_graphic ,则可以执行以下步骤: [LIST][*]将其他输入参数添加到函数定义的末尾。例如: function delete_graphic(hObject,eventdata,argA,argB)[*]在为按钮设置回调时,使用单元格数组,其中第一个单元格包含函数句柄,随后的每个单元格均包含输入参数。例如: set(delete_btn,'Callback',{@delete_graphic,A,B}); 需要注意的是,存储在单元格数组中的值A和B [I]固定为设置回调时的值[/I] 。如果您在代码中更改A或B , [I]则不会[/I]更改存储在单元格数组回调中的值。 [/LIST]如果您无法使用上述解决方案(例如,如果A和B需要更改值),那么还有一些其他选项可用于[URL="http://www.mathworks.com/help/techdoc/creating_guis/f13-998449.html"]在GUI的回调之间共享数据[/URL] : [LIST][*]您可以重新设计代码的组织,以利用[URL="http://www.mathworks.com/help/techdoc/matlab_prog/f4-39683.html"]嵌套函数[/URL] 。这使得在回调之间共享数据[I]非常[/I]容易。在[URL="http://www.mathworks.com/matlabcentral/fileexchange/authors/4537"]Steven[/URL]的[URL="http://www.mathworks.com/matlabcentral/fileexchange/"]MathWorks File Exchange[/URL]提交的[URL="http://www.mathworks.com/matlabcentral/fileexchange/7301"]使用嵌套函数[/URL]的[URL="http://www.mathworks.com/matlabcentral/fileexchange/7301"]GUI示例中[/URL]可以找到一些使用嵌套函数创建GUI的不错示例。[*]您可以将数据存储在uicontrol对象的[URL="http://www.mathworks.com/help/techdoc/ref/uicontrol_props.html#UserData"]UserData属性[/URL]中。要访问或更新它,您只需要对象句柄。[*]您可以使用功能[URL="http://www.mathworks.com/help/techdoc/ref/setappdata.html"]SETAPPDATA[/URL] / [URL="http://www.mathworks.com/help/techdoc/ref/getappdata.html"]GETAPPDATA[/URL]将数据附加到句柄图形对象(即uicontrol)。[*]由于看起来您的代码是使用GUIDE创建的,因此可以使用GUIDE创建的handles结构来使用[URL="http://www.mathworks.com/help/techdoc/ref/guidata.html"]GUIDATA[/URL]函数存储数据。[/LIST] [url=https://stackoverflow.com/questions/4361170]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 09:07。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.