Azzera filtri
Azzera filtri

Appending Matrix

4 visualizzazioni (ultimi 30 giorni)
B_Richardson
B_Richardson il 12 Lug 2011
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 Commento
B_Richardson
B_Richardson il 12 Lug 2011
%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

Accedi per commentare.

Risposta accettata

Fangjun Jiang
Fangjun Jiang il 12 Lug 2011
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 Commenti
Fangjun Jiang
Fangjun Jiang il 13 Lug 2011
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 il 13 Lug 2011
I understand now. Thank you!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Migrate GUIDE Apps in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by