1

我正在编写一个 OO gui 程序,但在尝试使用该set()函数更改 GUI 元素属性时遇到问题。我只是想将按钮启用属性从关闭更改为打开。我附上了显示下面相同问题的删节代码。matlab 处理类等的方式感觉很奇怪,所以问题可能只是由于我对系统的误解造成的。无论如何,当我尝试在 上使用该set()函数时handle AD.buttonExit,当我在函数中执行命令时,它会按预期initUI()工作。如果我尝试在不同的函数中做同样的事情,它会失败。我通过简单地打印AD. 在initUI函数中,它清楚地显示了一个句柄值buttonExit,它不在构造函数(或任何其他类成员函数)中。我觉得我犯了一个基本的错误,但是我没有看到它,我希望有人可以帮助我。

-- rfhigler

代码(为清楚起见而删节):

classdef test

  properties 
      AppUI;
      buttonExit;
  end

  methods 
      function AD = test()
          %draws UI
          AD.initUI(); 
          set(AD.buttonExit, 'Enable', 'on')
          AD.test2()
      end
      function initUI(AD)
          AD.AppUI = figure('Visible','off','Position',[520,321,695,482], 'MenuBar', 'none', 'Name', '3D Particle Tracking',...
              'NumberTitle', 'off', 'Resize', 'off', 'Color', [0.94,0.94,0.94]);
          AD.buttonExit = uicontrol('Enable', 'off', 'Style', 'pushbutton', 'Visible', 'on', 'Position', [35,29,181,31], 'String', 'Exit');
          set(AD.AppUI, 'Visible', 'on');
          %1 set(AD.buttonExit, 'Enable', 'on')
      end
      function test2(AD)
          set(AD.buttonExit, 'Enable', 'on')
      end
  end
end
4

2 回答 2

1

Matlab 类有点奇怪:默认情况下,它们是“值”类而不是“句柄”类。此处描述了不同之处。

简而言之,使您的类扩展handle该类将使其行为方式与您对其他 OO 语言的期望相同。只需将类定义行更改为

classdef test < handle
于 2012-06-12T02:29:53.560 回答
0

因为您在 initUI 中更新了 AD,所以必须输出更新后的变量。因此,您需要更改以下几行:

function initUI(AD)function AD = initUI(AD)

并且,在 test() 函数中:

AD.initUI();AD = AD.initUI();

于 2016-07-06T22:49:20.733 回答