Matlab 使用uigetdir作为按钮的回调,由于奇怪的无效参数而崩溃
我试图在Matlab(R2016a)GUI上创建一个简单的“浏览”按钮。 我的代码类似于:Matlab 使用uigetdir作为按钮的回调,由于奇怪的无效参数而崩溃,matlab,matlab-gui,Matlab,Matlab Gui,我试图在Matlab(R2016a)GUI上创建一个简单的“浏览”按钮。 我的代码类似于: hd = dialog; hb = uicontrol('parent',hd,'style','pushbutton','string','browse',... 'callback',@uigetdir); 回调函数uigetdir有两个可选参数STARTPATH,TITLE。原则上,我可以通过将它们与单元格数组上的函数句柄连接在一起,在回调中传递它们,例如 hd = dialog; hb = ui
hd = dialog;
hb = uicontrol('parent',hd,'style','pushbutton','string','browse',...
'callback',@uigetdir);
回调函数uigetdir
有两个可选参数STARTPATH,TITLE
。原则上,我可以通过将它们与单元格数组上的函数句柄连接在一起,在回调中传递它们,例如
hd = dialog;
hb = uicontrol('parent',hd,'style','pushbutton','string','browse',...
'callback',{@uigetdir,'myStartPath','myTitle');
无论我的浏览按钮是否使用可选参数调用uigetdir
,它都会崩溃。不同的错误,相同的原因:uicontrol
决定将2个未调用的奇怪变量(包含UI属性)作为回调函数的参数,并且uigetdir
不知道如何处理它们
这是否意味着我不能在GUI中使用
uigetdir
(或几乎任何其他内置函数)作为回调函数?除了编写自定义函数外,还必须有一个解决方案,没有?默认情况下,所有uicontrol
对象都传递两个输入参数:
处理自身uicontrol
- 包含特定于事件的信息的对象李>
@
附加到函数名以创建函数句柄来定义回调时,这两个参数将自动传递给函数
相反,您可以创建一个匿名函数来接受两个输入参数,并在没有输入参数的情况下调用uigetdir
,从而有效地忽略默认的回调输入
set(hb, 'Callback', @(s,e)uigetdir())
如果要传递起始路径和标题,可以从匿名函数中将它们传递到uigetdir
set(hb, 'Callback', @(s,e)uigetdir('mystartpath', 'mytitle'))
默认情况下,向所有
uicontrol
对象传递两个输入参数:
处理自身uicontrol
- 包含特定于事件的信息的对象李>
@
附加到函数名以创建函数句柄来定义回调时,这两个参数将自动传递给函数
相反,您可以创建一个匿名函数来接受两个输入参数,并在没有输入参数的情况下调用uigetdir
,从而有效地忽略默认的回调输入
set(hb, 'Callback', @(s,e)uigetdir())
如果要传递起始路径和标题,可以从匿名函数中将它们传递到uigetdir
set(hb, 'Callback', @(s,e)uigetdir('mystartpath', 'mytitle'))
我建议你读书,真的吗?文档中:“函数定义必须定义两个输入参数,
hObject
和callbackdata
。Handle Graphics®在调用函数时自动传递hObject
和callbackdata
。”文档中还包括:注意:如果要使用不支持hObject
和callbackdata
参数的现有函数,则可以将其指定为匿名函数。例如,uicontrol('Style','slider','Callback',@(hObject,callbackdata)myfunction(x))
“@excaza链接和突出显示的文本确实很有帮助;谢谢。我建议阅读文档中的“真的吗?”“函数定义必须定义两个输入参数,hObject
和callbackdata
。Handle Graphics®在调用函数时会自动传递hObject
和callbackdata
。“注意:如果要使用不支持hObject
和callbackdata
参数的现有函数,则可以将其指定为匿名函数。例如,uicontrol('Style','slider','Callback',@(hObject,callbackdata)myfunction(x))
“@excaza链接和突出显示的文本确实很有帮助;谢谢。