0

我正在尝试在 Matlab (R2016a) GUI 上创建一个简单的“浏览”按钮。我的代码是这样的:

hd = dialog;
hb = uicontrol('parent',hd,'style','pushbutton','string','browse',...
'callback',@uigetdir);

回调函数uigetdir有 2 个可选参数STARTPATH, TITLE。原则上,我可以通过将它们与单元格数组上的函数句柄连接起来将它们传递给我的回调,例如

hd = dialog;
hb = uicontrol('parent',hd,'style','pushbutton','string','browse',...
'callback',{@uigetdir,'myStartPath','myTitle');

无论我的浏览按钮调用是否uigetdir带有可选参数,它都会崩溃。不同的错误,相同的原因:uicontrol决定包含 2 个未调用的、奇怪的变量(包含 UI 属性)作为回调函数的参数,并且uigetdir不知道如何处理它们。

这是否意味着我不能使用uigetdir(或几乎任何其他内置函数)作为 GUI 中的回调函数?除了写自定义函数,肯定还有解决办法吧?

4

1 回答 1

4

默认情况下,所有uicontrol对象都传递两个输入参数:

  • 手柄uicontrol本身
  • 包含特定于事件的信息的对象。

当您通过简单地附加@到函数名称来创建函数句柄来定义回调时,这两个参数会自动传递给函数

相反,您可以制作匿名函数以接受两个输入参数并uigetdir在没有输入参数的情况下调用,从而有效地忽略默认的回调输入。

set(hb, 'Callback', @(s,e)uigetdir())

如果你想传递一个起始路径和一个标题,你可以uigetdir在匿名函数中传递它们。

set(hb, 'Callback', @(s,e)uigetdir('mystartpath', 'mytitle'))
于 2016-08-09T15:50:20.200 回答