- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有这行代码:
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;
为什么这段代码不起作用?我真的不明白...
我需要什么?我创建了一个按钮和一个列表框,单击按钮 - 从列表框中删除选定的元素。
感谢帮助。
附言总是收到此错误:
??? Undefined function or variable 'delete_graphic'.
??? Error while evaluating uicontrol Callback
这是我所有的代码:http://paste.ubuntu.com/540094/ (第 185 行)
最佳答案
通向 define a callback function 的首选方式是使用 function handle而不是字符串。当您使用字符串时,字符串中的代码将在 基础工作区 中进行计算。这意味着在评估回调时,字符串中使用的所有变量和函数都必须存在于基础工作区中。这会导致糟糕的 GUI 设计,因为您真的不希望 GUI 的操作依赖于基础工作区(用户可以轻松修改,因此可能会破坏您的 GUI)。
这也解释了您遇到的错误。函数 delete_graphic
定义为 subfunction在您的文件 rr_intervals.m
中。子函数只能由同一 m 文件中定义的其他函数调用,因此 delete_graphic
在基础工作区(评估字符串回调的位置)中不可见。使用函数句柄回调是更好的选择。以下是您的操作方式:
'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
需要更改值),还有一些其他选项可以帮助您share data among a GUI's callbacks :
UserData
property 中一个 uicontrol 对象。要访问或更新它,您只需要对象句柄。handles
结构来使用 GUIDATA 存储数据功能。关于user-interface - 如何在 MATLAB 中创建动态回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4361170/
我是一名优秀的程序员,十分优秀!