我正在编写一个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
答案 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();