Appending Matrix

6 ビュー (過去 30 日間)
B_Richardson
B_Richardson 2011 年 7 月 12 日
Hello everyone,
I have this code that writes zeros to a matrix based on the length of a listbox and popupmenu options. 1s are written to the matrix based on selections from the popupmenu and listbox:
function [] = pop_ex()
% Help goes here.
S.fh = figure('units','pixels',...
'position',[200 400 320 340],...
'menubar','none',...
'name','slider_ex',...
'numbertitle','off',...
'resize','off');
S.pp = uicontrol('style','pop',...
'unit','pix',...
'position',[20 20 80 40],...
'string',{'one','two','three','four'},...
'callback',@pp_call);
S.ls = uicontrol('style','list',...
'unit','pix',...
'position',[20 80 80 40],...
'min',0,'max',5,...
'string',{'lone','ltwo','lthree','lfour','lfive','lsix'});
guidata(S.fh,S)
function [] = pp_call(varargin)
% Callback for the popup.
S = guidata(gcbf);
A = zeros(length(get(S.pp,'string')),length(get(S.ls,'string'))); %create matrix A, fill with zeros based on length of popup and list items
A(get(S.pp,'val'),get(S.ls,'val')) = 1;
%write 1s for selected items
A
%output A
The code works however, I want to append the matrix instead of creating a new one each time.
  1 件のコメント
B_Richardson
B_Richardson 2011 年 7 月 12 日
%This line creates the matrix and fills it with zeros
A = zeros(length(get(S.pp,'string')),length(get(S.ls,'string')));
%this line writes 1s to the matrix based on the currently selected items from the listbox and popupmenu
A(get(S.pp,'val'),get(S.ls,'val')) = 1;
So the idea is upon multiple calls to this popupmenu callback (eventually this will be in a button separate from the popupmenu)
append A instead of creating a new A everytime

サインインしてコメントする。

採用された回答

Fangjun Jiang
Fangjun Jiang 2011 年 7 月 12 日
So it's not really append A, rather it is setting one element of A to 1 one at a time. What you need is to load A from guidata at the beginning of the callback function. save A to guidata at the end of the callback function. The setting of A to all zeros is better to put in the CreateFcn callback.
  4 件のコメント
Fangjun Jiang
Fangjun Jiang 2011 年 7 月 13 日
That is what I meant. In your example, A doesn't change size. In every call back, two elements are changed. So in your callback function, you don't want to re-set it to be all zeros. The initialization of A is better to be put in the CreatFcn callback. Then, in this callback, every time you need to load the previous value of A first, and then change some of its elements and then save it back. That is the right programming flow, right?
B_Richardson
B_Richardson 2011 年 7 月 13 日
I understand now. Thank you!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMigrate GUIDE Apps についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by