【问题标题】:How can I mimic a user click to invoke a callback function for a GUI object?如何模拟用户单击以调用 GUI 对象的回调函数?
【发布时间】:2011-08-13 11:26:04
【问题描述】:

我正在尝试以编程方式在 MATLAB 中创建一个单击事件,该事件将模拟用户单击 GUI 对象。对象的回调函数是子函数,所以不能直接调用。但是,我可以从对象中获取回调属性,该属性最终是一个 3×1 元胞数组,具有以下内容:

@uiBlockFn/callback_til [ 188.0011] [1x1 struct]

我如何在代码中调用此回调函数,以便它模仿用户单击 GUI 对象时会发生的情况?

【问题讨论】:

  • 不使用子函数进行回调,你能不能把它放到一个可以从另一个文件调用的私有/函数中?
  • 那会最方便,但我不能。作者只给了我p-code而不是m-code的功能。据我了解,该功能依赖于其他几个子功能。
  • 你有什么形式的回调?你有回调的函数句柄或字符串名称吗?能否从 GUI 对象本身获取回调函数?
  • @gnovice 所以对象回调是[(3乘1)单元格数组]。里面是@uiBlockFn/callback_til [188.0011] [1x1 struct]我如何使用它来回调?

标签: user-interface function matlab callback uicontrol


【解决方案1】:

假设您有一个带有句柄 hObject 的图形对象,并且您得到了对象的回调,如下所示:

callbackCell = get(hObject,'Callback');

正如您所提到的,您得到的元胞数组 callbackCell 最终是一个 3 元素元胞数组,其中第一个单元格中的 function handle 和其他两个单元格中的其他数据。当callback for an object is defined as a cell array(就像您的情况一样)时,回调函数句柄(或字符串名称)存储在第一个单元格中,您要传递给回调函数的其他输入参数位于其余单元格中。

但是,当激活对象时调用此回调时,实际上会在输入参数列表的开头由 MATLAB 自动插入 2 个附加参数。它们是:

  • hObject: 正在调用其回调的对象的句柄。
  • eventData:与用户激活事件相关的数据结构,通常只是空矩阵[]a few cases 除外)。

因此,如果您想模仿用户激活对象的动作,您可能需要如下调用回调函数(假设不​​需要事件数据):

callbackCell{1}(hObject,[],callbackCell{2:end});

【讨论】:

    【解决方案2】:

    这就是内置 hgfeval 函数的用途: http://undocumentedmatlab.com/blog/hgfeval/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-17
      • 1970-01-01
      • 2020-12-05
      • 2023-04-11
      • 2011-01-28
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多