类中的GUI句柄

时间:2012-06-11 13:24:01

标签: matlab user-interface handles

我正在编写一个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

2 个答案:

答案 0 :(得分:1)

Matlab类有点奇怪:默认情况下,它们是“值”类而不是“句柄”类。区别在于here

简而言之,让您的类扩展handle类将使其行为符合您对其他OO语言的期望。只需将类定义行更改为

即可
classdef test < handle

答案 1 :(得分:0)

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

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

,并且在test()函数中:

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