Matlab GUI uso dei bottoni per ripetere il codice

di il
8 risposte

Matlab GUI uso dei bottoni per ripetere il codice

Buongiorno a tutti.
Ho creato un'interfaccia con Matlab GUI dalla quale e' possibile scegliere una parte di un'immagine termica e restituire l'andamento della temperatura, lo studio dei picchi e altre grandezze . Ho gia' inserito nell'interfaccia tre bottoni con i quali vorrei fosse possibile selezionare altre aree. Ovvero quello che vorrei fare adesso (con i tre bottoni che si chiamano 'area1', 'area2', 'area3') e' permettere all'utente di studiare tre aree ed accedere all'analisi di ognuna tramite i suddetti bottoni, quindi l'intero codice deve essere ripetuto per ogni bottone. Qualcuno ha idea di come si puo' fare? Successivamente sarebbe utile anche poter resettare un bottone per cambiare l'area da studiare. Grazie a chiunque sara' in grado di aiutarmi

8 Risposte

  • Re: Matlab GUI uso dei bottoni per ripetere il codice

    Purtroppo la domanda è troppo vaga e non si riesce a capire cosa intendi fare, cosa hai già fatto e, nel caso, come vuoi modificare le funzionalità.

    L'unica cosa che si possa dire, per quanto, purtroppo altrettanto vaga, è che qualunque azione / funzionalità tu voglia attivare in seguito alla pressione di un pushbuttn deve essere codificata nella corrispondente callback.
  • Re: Matlab GUI uso dei bottoni per ripetere il codice

    Mi scuso e tento di essere piu' chiara. L'interfaccia per ora e' composta da tre sezioni: nella prima l'utente visualizza un intera imagine termica e deve selezionarne una parte (tramite gimput) della quale vuole plottare l'andamento della temperatura. Nella seconda sezione, appunto, appare l'andamento di tale temperatura con evidenziati i picchi. Nella terza sezione, tramite un popupmenu si seleziona il picco di cui visualizzare un terzo grafico che rappresenta la distribuzione di temperatura tramite un diagramma a barre. Tutto cio' e' gia' funzionante. Quello che vorrei consentire di fare all'utente e' di poter selezionare piu' di una area dell' imagine intera : l'immagine mostra tre isolatori dei quali e' utile conoscere l'andamente della temperatura , per ora si puo' selezionarne solo un isolatore (e plottarne appunto la temperatura e lo studio dei picchi) e poi chiudere l'interfaccia per riaprirla e selezionare un altra area (ad esempio il secondo isolatore) e cosi' via. Quello che vorrei fare con i bottoni e' di collegare ogni bottone ('area1',' area2', 'area3') alle tre aree dell'immagine di interesse. Quindi deve essere possibile: far girare il codice, premere il bottore 'area1' e selezionare l'area da studiare visualizzandone quindi le proprieta' ; premere il bottone 'area2' e selezionare la seconda area di cui visualizzare le proprieta' e cosi' anche per la terza area; per poi poter ripremere il pulsante area1 e rivisualizzare la prima area selezionata. Quindi per ogni bottone si deve far rigirare il programma dalla selezione dell'area (gimput). Quindi ad ogni punsante sara' collegata la ripetizione dell'intero script (dalla selezione dell'area allo studio dei picchi) e non solo di una funzione.
  • Re: Matlab GUI uso dei bottoni per ripetere il codice

    Quello che vorrei fare con i bottoni e' di collegare ogni bottone ('area1',' area2', 'area3') alle tre aree dell'immagine di interesse.
    Cosa intendi con collegare la porzione di un'imagine ad un pushbutton?
    Più oltre, nella domanda, scrivi di voler usare un pushbutton per selezionare un'area da studiare: conosci a priori l'area o no?

    Quindi deve essere possibile: far girare il codice,
    Quale codice?
    Dove hai scritto il codice? In uno script? In una funzione?
    Come vuoi eseguirlo? Solo dopo scrivi a proposito della pressione di un pushbutton.

    premere il bottore 'area1' e selezionare l'area da studiare visualizzandone quindi le proprieta' ; premere il bottone 'area2' e selezionare la seconda area di cui visualizzare le proprieta' e cosi' anche per la terza area;
    Hai scritto che usi la funzione "ginput" per selezionare l'area: potresti creare uno script od una funzione nella quale inserire il codice per la selezione dell'area ed invocare lo script o la funzione nella callback dei pushbuttons (così no devi duplicare il codice in ogni callback).

    per poi poter ripremere il pulsante area1 e rivisualizzare la prima area selezionata
    Nella callback di ogni pushbutton puoi salvare i parametri dell'area selezionata (usando la funzione "guidata", per esempio).
    Sempre nella callback, puoi inserire un controllo che verifichi se 'area già stata analizzata (puoi usare un flag, ad esempio, "area_processata" che setterai al termine della callback).
    In base al valore del flag, puoi decidere cosa fare: analizzare per la prima volta l'area o visualizzare i risultati precedenti.
  • Re: Matlab GUI uso dei bottoni per ripetere il codice

    Collegare un bottone ad un area nel senso che una volta selezionata e studiata un area, si puo' premere un bottone e poter selezionare un altra area da studiare senza perdere le informazioni della prima area. No non si conosce a priori l'area, la selezioni di volta in volta.
    Il codice e' inserito nello script GUI, anche se e' un po' lungo, lo alleghero' alla fine di questo messaggio.

    [img]C:\Users\HIVES\Desktop\Data%20analysis\IRCAmera[/img]
    Questa e' l'interfaccia. Forse non si vedono bene ma accanto all'immagine termica ci sono i tre pulsanti che vorrei attivare.

    
    function varargout = IR_GUI(varargin)
    % IR_GUI MATLAB code for IR_GUI.fig
    %      IR_GUI, by itself, creates a new IR_GUI or raises the existing
    %      singleton*.
    %
    %      H = IR_GUI returns the handle to a new IR_GUI or the handle to
    %      the existing singleton*.
    %
    %      IR_GUI('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in IR_GUI.M with the given input arguments.
    %
    %      IR_GUI('Property','Value',...) creates a new IR_GUI or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before IR_GUI_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to IR_GUI_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
    
    % Edit the above text to modify the response to help IR_GUI
    
    % Last Modified by GUIDE v2.5 28-May-2018 15:42:37
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @IR_GUI_OpeningFcn, ...
                       'gui_OutputFcn',  @IR_GUI_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
    
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
    
    
    % --- Executes just before IR_GUI is made visible.
    function IR_GUI_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to IR_GUI (see VARARGIN)
    % Create the data to plot.
    RootMATFileName ='DataIR';
    MaxNumMAT = 865;
    cd('C:\Users\HIVES\Desktop\Data analysis\IRCAmera\Matfiles')
    [filename, pathname, filterindex] = uigetfile('*.*', 'Pick 1st FLIR file');
    cd(pathname)
    videoFileName1='DataIR1';
    TempD = load(videoFileName1);
    Data1=TempD.DataIR1;
    
     handles.Data1=Data1;
     handles.current_data1 = handles.Data1;
    
      contourf(handles.Data1)
    %  [c,h] = contourf(handles.Data1,200, 'LineStyle','none');
    %         colorbar
    [x,y]=ginput;
    xx=round(x);
    yy=round(y);
    
    %first line
    xx1=xx(1:2,1);  
    yy1=yy(1:2,1);
    x1=min(xx1);
    x2=max(xx1);
    y1=min(yy1);
    y2=max(yy1);
    
    handles.x1=x1;
    handles.current_data2 = handles.x1;
    handles.x2=x2;
    handles.current_data3 = handles.x2;
    handles.y1=y1;
    handles.current_data4 = handles.y1;
    handles.y2=y2;
    handles.current_data5 = handles.y2;
    
    VideoIR{MaxNumMAT}.DataTemp = [];
    VideoIR{MaxNumMAT}.DateTime = [];
    VideoIR{MaxNumMAT}.ObjectParam = [];
    VideoIR{MaxNumMAT}.Scaling = [];
    VideoIR{MaxNumMAT}.FrameInfo =[];
     
    
    AllDatatemp = zeros(512,640,865);
    parfor kk = 1:MaxNumMAT
    DataFileName = sprintf('%s%d',RootMATFileName, kk);
    videoFileName =fullfile(pathname, DataFileName);
    % %
     TempD = load(videoFileName);
    % %
    datatmp = sprintf('%s',DataFileName);
    datatmptime = sprintf('%s_DateTime',DataFileName);
    datatmpObjectParam = sprintf('%s_ObjectParam',DataFileName);
    datatmpScaling = sprintf('%s_Scaling',DataFileName);
    datatmpFrameInfo = sprintf('%s_FrameInfo',DataFileName);
    %  
    % %
    VideoIR{kk}.DataTemp = TempD.(datatmp); % eval(datatmp)
    VideoIR{kk}.DateTime = TempD.(datatmptime);
    VideoIR{kk}.ObjectParam = TempD.(datatmpObjectParam );
    VideoIR{kk}.Scaling = TempD.(datatmpScaling);
    VideoIR{kk}.FrameInfo = TempD.(datatmpFrameInfo);
    
     TempD =[];
    
     MaxT_Kelvin(kk)= max(max(VideoIR{kk}.DataTemp));
     MaxT1_Kelvin(kk) = max(max(VideoIR{kk}.DataTemp(x1:x2,y1:y2))); % first insulator profile 
    
    % %
    
    Time(kk,:) = VideoIR{kk}.DateTime;
    
    end
    
    %from Kelvin to Celsius
     MaxT=MaxT_Kelvin-273.15;
     MaxT1=MaxT1_Kelvin-273.15;
    
    handles.MaxT=MaxT;
    handles.current_data6= handles.MaxT;
    
    handles.MaxT1=MaxT1;
    handles.current_data7= handles.MaxT1;
     
    %frame time
     
    t=Time(:,4:6);  
    
    %find peaks
    
    [peak_value,peak_location] = findpeaks(MaxT1,'MinPeakHeight',17,'MinPeakDistance',10) ; 
    num_peak=length(peak_location);
    text(peak_location+8,peak_value,num2str((1:numel(peak_value))'))
    
    %position of the peaks of tempearture
    
    VideoIR{MaxNumMAT}.DataTemp = [];
    AllDatatemp1 = zeros(512,640,num_peak);
    p=[];
    q=[];
    mx=[];
    for kk = 1:num_peak
    DataFileName1 = sprintf('%s%d',RootMATFileName, peak_location(1,kk));
    videoFileName1 =fullfile(pathname, DataFileName1);
    %
    TempD = load(videoFileName1);
    %
    datatmp = sprintf('%s.%s','TempD',DataFileName1);
    %
    VideoIR{kk}.DataTemp = eval(datatmp);
    %
    clear TempD
    %
    AllDatatemp1(:,:,kk) = VideoIR{kk}.DataTemp;     %whole image
    [mx_Kelvin(kk),Y(kk)] = max(max(AllDatatemp1(x1:x2,y1:y2,kk),[],1));
    [mx_Kelvin(kk),X(kk)] = max(max(AllDatatemp1(x1:x2,y1:y2,kk),[],2));
    end
    mx=mx_Kelvin-273.15;
    
    handles.AllDatatemp1=AllDatatemp1;
    handles.current_data8 = handles.AllDatatemp1;
    
    %MaxT verus time (not frame)
    
    c=cellfun(@(x) num2str(x,'%02d'),num2cell(t),'UniformOutput',false);  %t contains the istants of the IR frames
    d=strcat(c(:,1),':',c(:,2),':',c(:,3));
    
    handles.d=d;
    handles.current_data9 = handles.d;
    
     axes(handles.axes2);
    plot(datenum(handles.d,'HH:MM:SS'),handles.MaxT1);   %first bushing area
    ylabel('Temperature(Celsius)')
    datetick('x','HH:MM:SS')
    hold on
    
    %add peaks on the trend of MaxT 
    
    d1=d(peak_location,1);
    
    handles.d1=d1;
    handles.current_data10 = handles.d1;
    
    handles.peak_value=peak_value;
    handles.current_data11 = handles.peak_value;
    
    plot(datenum(handles.d1,'HH:MM:SS'),handles.peak_value,'o')
    datetick('x','HH:MM:SS')
    % 
    for i=1:num_peak
        num{i} = [num2str(i)];
    end
    handles.num_peak=num_peak;
    handles.current_data12 = handles.num_peak;
    
    handles.num=num;
    handles.current_data13 = handles.num;
    
    text(datenum(handles.d1,'HH:MM:SS')-0.01,handles.peak_value+0.5,num)
      
       
      %distribuition of probability
      
      for i=1:num_peak
       item_list{i}=['peak_' num2str(i)];
    end
    handles.popupmenu1.String=item_list;
    
    % for sel_item=1:num_peak
    % 
    %      
    % D=round(AllDatatemp1(x1:x2,y1:y2,sel_item)-273.15);
    %               
    % [D1,N]=hist(D,unique(D));
    % out=[N' sum((D1),2)];
    % 
    % handles.out=out;
    % handles.current_data6 = handles.out;
    % 
    %  axes(handles.axes5);
    % 
    % 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
    
    %display peak of temperature on the thermal image
    
    axes(handles.axes1);
    contour(handles.Data1)
    hold on
    z=length(X);
    XX=X+x1;
    YY=Y+y1;
    
    handles.XX=XX;
    handles.current_data14 = handles.XX;
    
    handles.YY=YY;
    handles.current_data15 = handles.YY;
    
     
    % 
    % for j=1:z
    %      
    %      plot(handles.XX(1,j),handles.YY(1,j),'r--o')
    %      pause(0.5);
    %      text(handles.XX(1,j)+8,handles.YY(1,j),num(1,j))
    % end   
    % tab of peaks (frame, coordinates, temperature)
    
    %make the peak table
    
    TabM=[d1,num2cell(XX'),num2cell(YY'),num2cell(mx')];
    
    handles.TabM=TabM;
    handles.current_data16 = handles.TabM;
    
    colnames = {'Time','X-axes', 'Y-axes', 'Tmax'};
    Tab = uitable('Data', handles.TabM, 'ColumnName', colnames, ...
    'Position', [1105 490 275 190]);
     
    % 
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes IR_GUI wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    function varargout = IR_GUI_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Get default command line output from handles structure
    
    
    
    % --- Executes on selection change in popupmenu1.
    function popupmenu1_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % Determine the selected data set.
    str = get(hObject, 'String');
    val = get(hObject,'Value');
    
    sel_item=handles.popupmenu1.Value;
    %figure 3 
    axes(handles.axes5);
    
    for i=1:sel_item
         
    D=round(handles.AllDatatemp1(handles.x1:handles.x2,handles.y1:handles.y2,i)-273.15);
                  
    [D1,N]=hist(D,unique(D));
    out=[N' sum((D1),2)];
    
    handles.out=out;
    handles.current_data6 = handles.out;
    
    bar(handles.out(:,1),handles.out(:,2))
    xlabel('Celsius degree');
    ylabel('number of pixel');
    tit=strcat('peak',{' '},num2str(i),{' '},{' '},'time:',handles.d1(i));
    title(tit);
    end
    
    %figure 2 trend of temperature
    axes(handles.axes2);
    
    plot(datenum(handles.d,'HH:MM:SS'),handles.MaxT1,'Color', [0 0.4470 0.7410]);   %first bushing area
    ylabel('Temperature(Celsius)')
    datetick('x','HH:MM:SS')
    hold on
    plot(datenum(handles.d1,'HH:MM:SS'),handles.peak_value,'r o')
    datetick('x','HH:MM:SS')
    text(datenum(handles.d1,'HH:MM:SS')-0.01,handles.peak_value+0.5,handles.num)
    
    scatter(datenum(handles.d1(sel_item),'HH:MM:SS'),handles.peak_value(sel_item),'filled','r')
    datetick('x','HH:MM:SS')
    hold off
    
    %figure 1 IR image: display peak
    axes(handles.axes1);
    % 
    dx=handles.x2-handles.x1;
    dy=handles.y2-handles.y1;
    
    handles.dx=dx;
    handles.current_data17 = handles.dx;
    
    handles.dy=dy;
    handles.current_data18 = handles.dy;
    
    %Display position of the selected peak in IR image and selected area rectangle
    
      contour(handles.Data1)
      hold on
      rectangle('position',[handles.x1,handles.y1,handles.dx,handles.dy],'LineWidth',0.5,'LineStyle','--')
      plot(handles.XX(1,sel_item),handles.YY(1,sel_item),'r o')
      text(handles.XX(1,sel_item)+8,handles.YY(1,sel_item),handles.num(1,sel_item))  
      hold off
    
    % Save the handles structure.
    guidata(hObject,handles)
    % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu1
    
    
    % --- Executes during object creation, after setting all properties.
    function popupmenu1_CreateFcn(hObject, eventdata, handles)
    
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    
    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor','white');
    end
    
    
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --- Executes on button press in pushbutton2.
    function pushbutton2_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --- Executes on button press in pushbutton3.
    function pushbutton3_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton3 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --- Executes on mouse press over axes background.
    function axes1_ButtonDownFcn(hObject, eventdata, handles)
    % hObject    handle to axes1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --- If Enable == 'on', executes on mouse press in 5 pixel border.
    % --- Otherwise, executes on mouse press in 5 pixel border or over popupmenu1.
    function popupmenu1_ButtonDownFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --- Executes during object creation, after setting all properties.
    function axes1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to axes1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: place code in OpeningFcn to populate axes1
    
    
    % --- Executes during object creation, after setting all properties.
    function axes2_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to axes2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: place code in OpeningFcn to populate axes2
    
    
    % --- Executes on mouse press over axes background.
    function axes2_ButtonDownFcn(hObject, eventdata, handles)
    
    % hObject    handle to axes2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    
    % --- Executes during object deletion, before destroying properties.
    function axes2_DeleteFcn(hObject, eventdata, handles)
    % hObject    handle to axes2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --- Executes during object creation, after setting all properties.
    function uitable2_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to uitable2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    
    % --- Executes when figure1 is resized.
    function figure1_SizeChangedFcn(hObject, eventdata, handles)
    % hObject    handle to figure1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --- Executes on key press with focus on popupmenu1 and none of its controls.
    function popupmenu1_KeyPressFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  structure with the following fields (see MATLAB.UI.CONTROL.UICONTROL)
    %	Key: name of the key that was pressed, in lower case
    %	Character: character interpretation of the key(s) that was pressed
    %	Modifier: name(s) of the modifier key(s) (i.e., control, shift) pressed
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --------------------------------------------------------------------
    function uitable2_ButtonDownFcn(hObject, eventdata, handles)
    % hObject    handle to uitable2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --- Executes on button press in pushbutton5.
    function pushbutton5_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton5 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --- Executes on button press in pushbutton6.
    function pushbutton6_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton6 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --- Executes on button press in pushbutton7.
    function pushbutton7_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton7 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --- Executes on button press in togglebutton1.
    function togglebutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to togglebutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hint: get(hObject,'Value') returns toggle state of togglebutton1
    

    Allegati:
    23811_fdb4ca30473aa7146bee6b7ed53c2e93.png
    23811_fdb4ca30473aa7146bee6b7ed53c2e93.png
  • Re: Matlab GUI uso dei bottoni per ripetere il codice

    Forse non hai letto l'ultima parte della mia risposta o, più probabilmente non sono stato sufficientemente chiaro.

    A quanto vedo, hai inserito la maggior parte del codice nella funzione "IR_GUI_OpeningFcn".
    A quanto ho capito vorresti, in qualche modo attivare questo codice (con opportune modifiche) alla pressione dei pushbutton.

    Se è così, a questo punto dovresti:

    [*] pensare a cosa effettivamente deve consentire di fare la GUI: vuoi avere tre pushbutton per selezionare / analizzare tre aree, ma, a quanto vedo, la GUI ha un solo "axes" ed un solo istogramma nei quali se ho capito plotti i risultati dell'elaborazione.
    Premendo i vari pushbutton, sembrerebbe che i grafici vengano sovrascritti ogni volta (quando premi il pushbutton 2 dopo aver premuto il pushbutton 1, perdi i grafici precedenti).
    Ti servono davvero tre pushbutton o puoi usarne solo uno per selezionare, di volta in volta le aree?
    Potresti avere un solo pushbutton e, esempio un po-u menu nel con il quale richiamare i risultati delle aree già analizzate.

    Ad ogni modo, se vuoi mantenere i tre pushbuttons, come ho scritto nella risposta precedente, devi analizzare il codice attualmente nella funzione "IR_GUI_OpeningFcn" e:

    [*] identificare quale parte verrebbe eseguita indipendentemente dal pushbutton premuto
    [*] isolarla ed inserirla in un script od in una funzione
    [*] identificare quale parte (ammesso che ci sia) sia specifica per ogni pushbutton
    [*] spostare questa parte specifica nella callback di ogni pushbutton (cn le opportune modifiche)
    [*] inserire nelle callback dei pushbutton la chiamata allo script / funzione "comune" (vedi primi due punti di questa serie)

    Oltre a questo, potresti dover modificare opportunamente il codice associato al pop-up menu.
  • Re: Matlab GUI uso dei bottoni per ripetere il codice

    Grazie mille per la pazienza davvero, mi rendo conto che non e' facile spiegare o capire questo tipo problemi da qui. Alla fine ho messo un solo bottone, come suggerito, che e' in grado di far riselezionare l'area e funziona perfettamente . Ti chiedo ancora scusa se le mie domande sono ripetitive, ma sono agli inizi e sto tentando di capire come ragionare.
    Se posso fare un'altra domada, e' possibile settare un parametro direttamente dall'interfaccia? In questo momento nel mio script appare
    [peak_value,peak_location] = findpeaks(MaxT1,'MinPeakHeight',17,'MinPeakDistance',10) ;
    ove 17 e' il MinPeakHeight, ed e' fisso. E' possibile consentire all'utilizzatore di sceglierlo direttamente dall'interfaccia?
  • Re: Matlab GUI uso dei bottoni per ripetere il codice

    Non hai niente di cui scusarti

    Per quanto riguarda i settaggio di un parametro, ci sono diverse possibilità:
    [*] se hai un set di valori possibili che consci in anticipo, puoi usare un pop-up menu che puoi inizializzare, ad esempio, nella "IR_GUI_OpeningFcn"
    [*] in alternativa puoi usare un "edit" ne quale l'utente può scrivere il valore. In questo caso il valore inserito sarà memorizzato nella property "String" come "stringa" per cui dovrai convertirlo in un numero con la funzione "str2num" o "str2double"
  • Re: Matlab GUI uso dei bottoni per ripetere il codice

    Perfetto funziona! Grazie mille ancora per la pazienza! Buona giornata
Devi accedere o registrarti per scrivere nel forum
8 risposte