处理matlab GUI中的结构

时间:2011-07-22 10:06:17

标签: user-interface matlab

我正在学习Matlab中的GUI programmin。

我发现用于存储所有gui数据的句柄结构非常棘手。我想知道结构究竟是怎样的。我将用一个例子来解释我的问题。

让我们说,我们创建了edittext1。

我们将把handle.edittext1存储起来。 然后

str = get(hObject,'String');
set(handles.edittext1,'String',str);

这会将handles.edittext1中的String设置为str。

我的问题是 令我惊讶的是,get和set操作中的'String'不区分大小写。

handle.edittext1.String不返回存储的字符串。

因此,句柄不是结构数组,作为后面的问题,它应该是什么句柄结构? 同样的问题也可以被问到hObject。

不,这不是作业或作业。这是我工作的一个持续项目。我已经使用matlab多年了,但这是我第一次使用matlab制作GUI。所以,请把我当成新手。

问候

2 个答案:

答案 0 :(得分:4)

hObject是发出回调的对象的句柄(例如,单击时启动回调的按钮)。 handles是一个包含图中所有对象句柄的结构。对于每个对象,hObject将是不同的,相同的句柄列表将被传递给每个回调。在您的示例中,如果它位于edittext1回调中,则hObject和handles.edittext1是相同的。

两者都是对象的句柄,而不是结构。所以你不能说handle.edittext1.String。通过set和get函数访问对象的所有属性(如字符串内容)。如您所见,属性名称不区分大小写。希望能回答你所有问题。

<强>更新

我对您的跟进问题的回复对于评论来说太长了,所以我更新了答案。

我不确定我理解你的问题。如果您想检查属性的值,请使用您在问题中显示的get:

str = get(handles.edittext1, 'String');

如果要检查属性是否存在或属性是什么,请在不指定参数的情况下调用get:

get(handles.edittext1)

这会将所有属性及其值打印到控制台。如果您想以编程方式执行此操作,

params = get(handles.edittext1);

将返回其字段为参数的结构。然后,您可以访问参数

str = params.String

并且可以检查字段是否存在

 isfield(params, 'String');   // This is case sensitive

答案 1 :(得分:0)

AFAIK GUI组件的所有句柄都是类的对象(OOP),它继承自handle超类(hgsetget更准确,它本身是handle的子类)。因此hObject存储指向对象的指针,而不是对象本身。

handle类及其公共子类公开了常见函数(接口),例如set / get(它们对属性名称执行不区分大小写的部分匹配)。在这种情况下,您需要使用getter / setter方法访问“property”'string'。

handles是GUIDE生成的GUI中使用的变量,为了方便用户而传递给回调函数。它是一个简单的结构(不是结构数组),因此每个字段可以存储不同类型的数据。

注意:MATLAB有一个很好的文档,详细解释了所有这些。我稍后会更新相关页面链接的答案。