Matlab GUI automatizzare numero elementi popupmenu

di il
2 risposte

Matlab GUI automatizzare numero elementi popupmenu

Buongiorno a tutti, sto cercando di trasformare il mio script per la lettura di immagini termiche in un file GUI.
La mia interfaccia attuale e' composta da tre sezioni principali: nella prima viene raffigurata l'intera imagine termica e da essa si puo' selezionare una porzione d'interesse dell'immagine che si vuole studiare; nella seconda viene successivamente plottato l'andamento della temperatura e vengono individuati i picchi tempearura; nella terza sezione vorrei che venisse raffigurato il numero di pixel corrispondenti ad ogni temperatura per ogni picco (diagramma a barre), quindi dev'errere possibile scegliere il picco di cui si vuole conoscere la distribuzione di temperatura. Per fare cio' ho inserito un pop menu' a fianco alla terza sezione dal quale vorrei fosse possibile scegliere il picco di cui si vuole visualizzare il codice a barre. La creazione dei vari diagrammi a barre e' realizzata con un ciclo for (for i=1:num_peak), quindi le immagini che si potranno visualizzare nella terza sezione saranno di numero num_peak. E' possibile creare il menu' a tendina automaticamente di tanti elementi quanti sono i picchi rilevati dal codice? In tal caso come faccio a inserire il mio ciclo for di creazione di grafici a barre nell'interafaccia GUI e a collegarlo a popupmenu? Qui sotto aggiungo la parte di codice in questione perche' il mio problema sia piu' chiaro .

%distribuition of temperature
for i=1:num_peak


D=round(AllDatatemp1(x1:x2,y1:y2,i)-273.15);

[D1,N]=hist(D,unique(D));
out=[N' sum((D1),2)];

handles.out=out;
handles.current_data6 = handles.out;

axes(handles.axes3);

bar(handles.out(:,1),handles.out(:,2))
xlabel('Celsius degree');
ylabel('number of pixel');
tit=strcat('peak',{' '},num2str(i),{' '},{' '},'time:',d1(i));
title(tit);
end

Vorrei che fosse possibile scegliere una delle num_peak immagini create da questo ciclo tramite un pop menu contenente tante voci quanti sono i picchi trovati dallo script.
Grazie a chiunque sara' in grado di aiutarmi

2 Risposte

  • Re: Matlab GUI automatizzare numero elementi popupmenu

    Non è chiaro quello che vuoi realizzare.

    come faccio a inserire il mio ciclo for di creazione di grafici a barre nell'interafaccia GUI e a collegarlo a popupmenu?

    Sembrerebbe che tu voglia utilizzare il "menu a tendina" per selezionare l'elemento da plottare, ma che, al tempo stesso tu voglia utilizzare il ciclo "for", sempre per il plottaggio anche se, a quanto sembra il ciclo "for" crea tutti i grafici.

    Le due cose sembrano in contrasto.

    Tra l'altro, sembra che il ciclo for "sovrascriva" i vari diagrammi nel ciclo for.

    Se vuoi sostituire il ciclo "for" con la selezione dell'elemento da plottare dal pop-up menu:


    [*] immagino avrai una parte del codice nel quale calcoli "num_peak": una volta calcolato il valore di "num_peak" puoi settare le stringhe corrispondenti nel pop-up menu creando le stesse, ad esempio, aggiungendo un valore numerico incrementale ad una stringa base.
    In questo modo avresti, nel pop-up delle stringhe del tipo: "elemento_1", "elemento_2", ...
    
    for i=1:num_peak
       item_list{i}=['elemento_' num2str(i)]
    end
    handles.popupmenu1.String=item_list;
    
    [*] a questo punto, nella callback del popo-up menu dovresti identificare l'item selezionato:
    
    sel_item=handles.popupmenu1.Value
    
    quindi dovresti inserire il codice che ora hai nel ciclo for nella callback, sostituendo la variabile "i" con "sel_item" (il valore selezionato dall'utente.

    Questo dovrebbe plottare l'elemento desiderato.

    Nel caso tu voglia selezionare più di un elemento nel popo-up menu, devi sostituire il "pop-up menu" con un "listbox" e settare la property "Max" ad un valore corrispondente al numero massimo di elementi che vuoi poter selezionare.

    Dal momento che quando selezioni un elemento nella listbox, viene invocata la sua callback, dovresti aggiungere un altro "uicontrol", ad esempio un pushbutton e spostare il codice per il plottaggio dalla callback del listbox a quello del pushbutton.

    In questo caso, il codice dovrebbe essere inserito all'interno di un ciclo for con limite il numero di elementi selezionati.

    Dovresti anche gestire l'axes nel quale effettuare il plottaggio in modo che il grafico successivo non cancelli il precedente.
  • Re: Matlab GUI automatizzare numero elementi popupmenu

    Mi dispiace se mi sono spiegata male, comunque e' riuscito a darmi le informazioni che mi servivano ed ho risolto il problema, grazie infinite!
Devi accedere o registrarti per scrivere nel forum
2 risposte