And*_*mig 5 matlab user-interface function callback
我有这行代码:
delete_btn = uicontrol(rr_ops, 'Style', 'pushbutton', 'String', 'Delete Graphic', 'Position', [13 135 98 20], ...
'Callback', 'delete_graphic');
Run Code Online (Sandbox Code Playgroud)
并且稍微提高了这个功能:
function delete_graphic
global rr_list
selected = get(rr_list, 'Value');
selected
return;
Run Code Online (Sandbox Code Playgroud)
为什么这段代码不起作用?我真的不明白......
我需要什么?我创建了一个按钮和一个列表框,单击按钮 - 从列表框中删除所选元素.
谢谢你的帮助.
PS总是收到此错误:
??? Undefined function or variable 'delete_graphic'.
??? Error while evaluating uicontrol Callback
Run Code Online (Sandbox Code Playgroud)
这是我的所有代码:http://paste.ubuntu.com/540094/(第185行)
gno*_*ice 10
定义回调函数的一般首选方法是使用函数句柄而不是字符串.使用字符串时,将在基本工作空间中计算字符串中的代码.这意味着在评估回调时,字符串中使用的所有变量和函数都必须存在于基础工作空间中.这会导致GUI设计不佳,因为您并不希望GUI的操作依赖于基础工作区(用户可以轻松修改,因此可能会破坏您的GUI).
这也解释了你得到的错误.该函数delete_graphic被定义为文件中的子函数rr_intervals.m.子函数只能由同一m文件中定义的其他函数调用,因此delete_graphic在基础工作区(评估字符串回调的位置)中不可见.使用函数句柄回调是一个更好的选择.这是你如何做到的:
'delete_graphic'为@delete_graphic.将delete_graphic(第185行)的函数定义更改为:
function delete_graphic(hObject,eventdata)
Run Code Online (Sandbox Code Playgroud)
hObject发出回调的对象的句柄在哪里,是发出回调eventdata时提供的可选数据.
编辑:
如果要将其他参数传递给delete_graphic,可以执行以下步骤:
将其他输入参数添加到函数定义的末尾.例如:
function delete_graphic(hObject,eventdata,argA,argB)
Run Code Online (Sandbox Code Playgroud)在为按钮设置回调时使用单元格数组,其中第一个单元格包含函数句柄,后续单元格包含输入参数.例如:
set(delete_btn,'Callback',{@delete_graphic,A,B});
Run Code Online (Sandbox Code Playgroud)
有一点需要注意这一点,这是价值观A和B存储单元阵列按照固定在它们是什么,当你设置回调.如果更改A或B在代码中,它将不会更改存储在单元格数组回调中的值.
如果您无法使用上述溶液(即如果A和B需要修改的值),还有你怎么能其他几个选项共享GUI的回调之间的数据:
UserData属性中.要访问或更新它,您只需要对象句柄.handlesGUIDE创建的结构来使用GUIDATA函数存储数据.| 归档时间: |
|
| 查看次数: |
10325 次 |
| 最近记录: |