用户界面-发送句柄到matlab中的匿名函数



作为主题,我试图发送句柄,以便匿名函数可以与GUI的其余部分交互。然而,当查看匿名函数中的输入时,它们是空的。

在这里将函数添加到GUI:

x=5;
y=3;
z=4;
set(gca,'ButtonDownFcn', @(y,z,x)mousecontroll_callback)

Inside函数会对你点击的内容做出反应,但它不能读取y,z或x

function mousecontroll_callback(y,z,x)
...

当运行这个GUI时,我得到这个错误消息,它是从另一个名为otherGUI的GUI调用的"使用screenmode>screenmode_OutputFcn时出错输入参数太多。

gui_mainfcn中的错误(第265行)函数宏指令(gui_State。gu_outputfcn, gu_hfigure, [],gui_Handles);

屏幕模式错误(第42行)gui_mainfcn (gui_State变长度输入宗量{:});

otherGUI>全屏错误(第1031行)screenmode(图像、范围);计算ui回调时出错-然而,当不搞乱输入到匿名函数,并试图访问他们的代码运行。

我不想再使用全局变量了,有人知道如何让这个函数得到x,y,z,以后会是句柄吗?

试试这个:

 set(gca,'ButtonDownFcn', { @mousecontroll_callback , x,y,z} );
 ...
 function mousecontroll_callback(hObj,evt,x,y,z)
 end

{}语法让Matlab知道你想传递额外的变量。


注意,x, yz值将作为闭包上下文的一部分被冻结,即使您更新它们也将是相同的。如果您想这样做,则需要找到另一个解决方案,例如:

  • 使用guidata全局数据存储来传输结构体(像Guide一样)-最流行的解决方案。
  • 创建自己的handle对象,该对象将传递给所有函数
  • 使用全局变量
  • 使用嵌套函数,类似于使用全局变量

你的代码中有一个错误,这意味着它没有做你认为的事情。

x=5;
y=3;
z=4;
set(gca,'ButtonDownFcn', @(y,z,x)mousecontroll_callback)

你有上面的代码,我猜你希望在按下按钮时执行以下命令:

mousecontroll_callback(3,4,5);

实际上,通过将参数紧接在@符号之后,您实际上创建了一个包装器函数,如下所示(baz)

x=5;
y=3;
z=4;
set(gca,'ButtonDownFcn', @baz)
function foo = baz(b,c,a)
  mousecontroll_callback
end

如果你使用下面的代码,它应该能正常工作:

set(gca,'ButtonDownFcn', @() mousecontroll_callback(y,z,x));

我还建议看一下MathWorks关于匿名函数的文档

相关内容

  • 没有找到相关文章

最新更新