0

另一个指导问题。

我创建了一个带有弹出菜单的 GUIDE 图。菜单的元素是在调用图形时动态确定的。示例:myGUI(data, popupNames)应该被调用,然后应该使用包含在 popupNames 中的字符串来标记选项。我可以在弹出菜单的回调中做到这一点。但是,这意味着在我实际按下弹出菜单上的 并选择第一个(当前为空)选项之前,不会填充弹出窗口。

我的问题是如何通过 create 函数(或任何其他函数)动态填充它。我还需要对 uitable 做同样的事情(填充行和列名,虽然这个不是动态的)

我的失败尝试使我意识到我无法在创建函数中访问句柄数据,如下所示:

% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
handles.popupNames = varargin{2};
set(hObject, 'String', {handles.popupNames{1:end}});

% --- Executes during object creation, after setting all properties.
function uitable1_CreateFcn(hObject, eventdata, handles)

handles.data = varargin{1};

t = uitable(handles.uitable1);
set(t,'Data',handles.data{1})
set(t, 'ColumnName', {'a', 'b', 'c'})
set(t,'RowName', {'1', '2', '3'})
4

1 回答 1

4

GUIDE 生成一个myGui_OpeningFcn(hObject, eventdata, handles, varargin). 在那里,您可以初始化您的字符串:

function myGui_OpeningFcn(hObject, eventdata, handles, varargin)

    handles.output = hObject;

    set(handles.popupmenu1, 'String', varargin{2});

    set(handles.uitable1, 'Data', varargin{1});
    set(handles.uitable1, 'ColumnName', {'a' 'b' 'c'});
    set(handles.uitable1, 'RowName', {'1' '2' '3'});

    guidata(hObject, handles);
end

请注意,使用guidatawhich 会更新 GUI 的句柄结构,新的handles. guidata如果您在更改结构时不调用handles,则您所做的更改将不会反映。

于 2013-06-20T17:17:24.117 回答