【问题标题】:accessing nested functions from GUI从 GUI 访问嵌套函数
【发布时间】:2016-03-04 11:04:01
【问题描述】:

我正在尝试使用几乎多合一的函数,在主函数和嵌套函数中创建 GUI 和必要的变量以用作回调操作。

当我有

function[]=foo()
A=1;

uicontrol('style','pushbutton','callback','A=bar(A);')

function[OUT]=bar(IN)
OUT=IN+1;

我得到错误:

Undefined function 'bar' for input arguments of type 'double'.

Error while evaluating uicontrol Callback`

如果foo 是一个脚本并且barbar.m 文件中定义,它就可以工作。在我看来,回调在 MATLAB 工作区中的默认变量和当前工作目录中的脚本/函数中使用。 如何访问在调用函数中定义的变量(这里是变量A)和嵌套在调用函数中的函数(这里是函数bar

【问题讨论】:

  • 我已经阅读了您的问题 5 次,但我仍然无法理解您想要做什么。你能稍微解释一下你正在尝试做什么、做什么以及你不喜欢什么吗?
  • 我正在尝试调用在创建 GUI 的函数中定义的函数和变量。

标签: matlab user-interface nested


【解决方案1】:

对于定义回调,我发现最可靠的方法是使用anonymous functions。话虽如此,如果barfoo 的嵌套函数,那么它已经可以访问A 并且可以修改A

function = foo()
    A = 1;

    uicontrol('style', 'pushbutton', 'callback', @(s,e)bar())

    % This is a nested function that already has access to A
    function bar()
        A = A + 1;
    end

    % Let's call bar here to demonstrate it updates A
    bar();
    disp(A);
end

此外,您的回调实际上不能将输出传递回作为回调的控件的工作区。如果您想返回一个结果,您可能希望 1) 将结果存储在图形对象的 UserData 中,2) 使用我们展示的嵌套子函数,或者 3) 将句柄传递给自定义句柄对象到回调(classdef object < handle

【讨论】:

  • 这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多