Matlab GUI:使用变量引用现有对象句柄

时间:2012-04-24 20:12:02

标签: matlab matlab-guide

我目前正在为学校的matlab最终项目工作。在编程方面,我认为自己相当知识渊博且精通...但Matlab只是有很多奇怪的东西。

  

基本问题 (在找到答案后意识到这一点)!如何在调用gui句柄对象时使用变量   没有使用变量的名称而不是值?

     

换句话说: 在字段名称中使用变量(如果我知道这很简单,我就不会问)

我的项目正在构建一个古老的“战舰”游戏的简单演绎。

我的问题:我目前有5件船舶对象(轴)。它们一次被选中一个以移动到另一个位置(网格)。 我能够使用 setpixelposition 按钮点击后移动每个对象。

现在点击按钮,我有类似的东西

function btnPlaceShip_Callback(hObject, eventdata, handles) 

    %Store the current selected ship(passed from an onclick to a label) 
    ship = get(handles.lblSelectedShip,'string');

    %I have tried everything I could think of, but basically I want to achieve the
    %following

    setpixelposition(handles.ship, [0 250 50 250]) 
    %where the variable 'ship' contains the name of the object.

换句话说, var 发货 ='shipAircraftCarrier'和..

    setpixelposition(handles.shipAircraftCarrier, [0 250 50 250]) 

有效!(设置指定的特定船舶的位置)。但是,使用变量 ship ,matlab会逐字地获取字符串而不是其值。改为使用变量非常方便!

如果有人有任何解决方案,我将不胜感激。我在网上搜索过,但也许我缺少对Matlab GUI内容的一些基本理解 - matlab帮助文档是非描述性的并且没有多大帮助。

3 个答案:

答案 0 :(得分:0)

您可以使用eval函数执行此操作,但是您需要注意字符串注入:

setpixelposition(eval(strcat('handles.',ship)), [0 250 50 250])  

答案 1 :(得分:0)

您可以使用dynamic fieldnamesgetfield。使用标识符与字符串的字段索引在Matlab structs和Javascript objects中非常相似。

Matlab的:

fromId = handles.shipAircraftCarrier; %identifier
fromString = handles.('shipAircraftCarrier'); %string

使用Javascript:

var fromId = handles.shipAircraftCarrier; //identifier
var fromString = handles["shipAircraftCarrier"]; //string

答案 2 :(得分:0)

正如其他人所说,使用dynamic fieldnames。虽然没有测试它的代码,但我相信只需在 ship 周围放置括号就会将字符串替换为结构名称,因此

setpixelposition(handles.(ship), [0 250 50 250])

尽可能避免使用eval()。