User interface 如何在MATLAB中创建动态回调?
我有一行代码:User interface 如何在MATLAB中创建动态回调?,user-interface,function,matlab,callback,User Interface,Function,Matlab,Callback,我有一行代码: 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 ret
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
下面是我的全部代码:(第185行)通常首选的方法是使用a而不是字符串。使用字符串时,将在基本工作区中计算字符串中的代码。这意味着在计算回调时,字符串中使用的所有变量和函数都必须存在于基本工作区中。这会导致糟糕的GUI设计,因为您不希望GUI的操作依赖于基本工作区(用户可以轻松修改基本工作区,从而可能破坏GUI) 这也解释了您得到的错误。函数
delete\u graphic
在文件rr\u interval.m
中定义为a。子函数只能由同一m文件中定义的其他函数调用,因此delete\u graphic
在基本工作区中不可见(在该工作区中计算字符串回调)。使用函数句柄回调是更好的选择。以下是您将如何做到这一点:
- 将按钮(第216行)的回调从
更改为'delete\u graphic'
@delete\u graphic
- 将
(第185行)的功能定义更改为: 其中,delete_graphic
是发出回调的对象的句柄,hObject
是发出回调时提供的可选数据eventdata
delete\u graphic
,可以执行以下步骤:
- 将其他输入参数添加到函数定义的末尾。例如:
function delete_graphic(hObject,eventdata,argA,argB)
set(delete_btn,'Callback',{@delete_graphic,A,B});
- 为按钮设置回调时,请使用单元格数组,其中第一个单元格包含函数句柄,随后的每个单元格都包含输入参数。例如:
function delete_graphic(hObject,eventdata,argA,argB)
对此有一个警告,即存储在单元格数组中的set(delete_btn,'Callback',{@delete_graphic,A,B});
和A
值在设置回调时是固定的。如果在代码中更改B
或A
,则不会更改存储在单元格数组回调中的值B
A
和B
需要更改值),您可以使用以下几种其他选项:
- 您可以修改代码的组织结构以利用。这使得在回调之间共享数据非常容易。在submission by中可以找到一些使用嵌套函数创建GUI的好例子
- 您可以将数据存储在uicontrol对象的文本中。要访问或更新它,您只需要对象句柄
- 您可以使用函数/将数据附加到句柄图形对象(即uicontrol)
- 由于代码似乎是使用GUIDE创建的,因此可以使用GUIDE创建的
结构来使用函数存储数据句柄