【问题标题】:How to store results from a callback function?如何存储回调函数的结果?
【发布时间】:2012-11-30 23:26:52
【问题描述】:

我创建了一个 MATLAB gui 来运行某个模拟。

在这个 gui 中是一个按钮来开始模拟。然后,此按钮回调函数将执行计算。这当然会产生一个包含结果的数据集。

界面中还有一个绘图区,以及一个用于在不同图形之间切换的选择框,以显示模拟结果的不同方面。因此,结果也必须可用于 gui 中的其他功能。这是个问题,因为回调函数没有输出

我能想到的两种解决方案是将数据集存储在 MAT 文件中,或者使用全局变量。第一个解决方案对我来说似乎并不正确,而且我了解到如果可能的话,必须避免全局变量。那么这里最好的解决方案是什么?

【问题讨论】:

    标签: matlab user-interface callback


    【解决方案1】:

    您可以创建一个用户定义的类,该类继承自定义回调的句柄类,然后您的回调从句柄类实例的“内部”执行

    classdef mySimulation < handle
        properties
            hFigure
            mySimResults
        end
        methods
            function this = mySimulation(varargin)
                hFigure = figure; 
                ...
                <build figure components>
                ...
            end
            function myButtonCallback(this, src, evnt)
                this.mySimResults = runMySimulation;
                ...
                <update plot etc>
            end
            function mySelectBoxCallback(this, src, evnt)
                ...
                <update plots>
            end
        end
    end
    

    【讨论】:

    • 是的,谢谢您的回答。您也可以为此使用子函数。
    • 如果子函数是指在 .m “脚本”文件中使用各种函数声明,我认为您可能会失去回调函数的范围,并且需要将数据存储在 .mat 等某个地方你提到的方法,或者另一个答案中提到的GUI的appdata......我发现这些方法有点笨拙:)
    【解决方案2】:

    MATLAB 为此提供了某些功能。有函数guidata,可以存储一个变量。例如,这可以用来传递您的 gui 句柄。此外还有 setappdata 和 getappdata 函数。这些函数是函数之间传输数据的方式,也是将变量耦合到图形句柄的方式。

    更多关于不同方法的信息可以阅读here

    这应该比使用全局变量在语义上更正确。不过,我还是很好奇为什么。有cmets吗?

    【讨论】:

      猜你喜欢
      • 2017-12-29
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多