Come dare variabili in input a una GUI

di il
2 risposte

Come dare variabili in input a una GUI

Ciao! Ho cercato in tutto Internet una spiegazione sulle GUI in matlab e ho letto di creazioni guidate, non guidate, finchè non ho trovato questo script nella documentazione di matlab

function myui
    % Create a figure and axes
    f = figure('Visible','off');
    ax = axes('Units','pixels');
    surf(peaks)
    
    % Create pop-up menu
    popup = uicontrol('Style', 'popup',...
           'String', {'parula','jet','hsv','hot','cool','gray'},...
           'Position', [20 340 100 50],...
           'Callback', @setmap);    
    
   % Create push button
    btn = uicontrol('Style', 'pushbutton', 'String', 'Clear',...
        'Position', [20 20 50 20],...
        'Callback', 'cla');       

   % Create slider
    sld = uicontrol('Style', 'slider',...
        'Min',1,'Max',50,'Value',41,...
        'Position', [400 20 120 20],...
        'Callback', @surfzlim); 
					
    % Add a text uicontrol to label the slider.
    txt = uicontrol('Style','text',...
        'Position',[400 45 120 20],...
        'String','Vertical Exaggeration');
    
    % Make figure visble after adding all components
    f.Visible = 'on';
    % This code uses dot notation to set properties. 
    % Dot notation runs in R2014b and later.
    % For R2014a and earlier: set(f,'Visible','on');
    
    function setmap(source,callbackdata)
        val = source.Value;
        maps = source.String;
        % For R2014a and earlier: 
        % val = get(source,'Value');
        % maps = get(source,'String'); 

        newmap = maps{val};
        colormap(newmap);
    end

    function surfzlim(source,callbackdata)
        val = 51 - source.Value;
        % For R2014a and earlier:
        % val = 51 - get(source,'Value');

        zlim(ax,[-val val]);
    end
end
La mia domanda è: se nel mio script principale dal quale richiamo questa GUI per esempio, voglio passargli qualche parametro come faccio? nelle function dello script sopra dove li prende i parametri "source" e "callbackdata"? mica si attivano (queste funzioni) mentre premo il pulsante associato a queste funzioni tramite la proprietà Callback?

Grazie mille!

2 Risposte

  • Re: Come dare variabili in input a una GUI

    Il modo più semplice per creare una GUI è usare il tool GUIDE di MatLab che si apre con il comando "guide".

    Nelle risposte a questa domanda http://www.iprogrammatori.it/forum-programmazione/matlab-simulink/creazione-una-gui-dati-diversi-script-t24301.html#p8535928 puoi trovare alcune informazioni sull'utilizzo del tool.

    Puoi trovare altre (e più dettagliate) informazioni ed esempi qui:


    http://it.mathworks.com/help/matlab/gui-building-basics.html

    Per quanto riguarda lo script che hai inserito, purtroppo ho una versione di MatLab più "vecchia" della tua e non posso eseguire il codice che hai inserito.

    Ad ogni modo, le funzioni "setmap" e "surfzlim" sono associate, rispettivamente, alle callback del pooup menu e dello slider:
    
    popup = uicontrol('Style', 'popup',...
               'String', {'parula','jet','hsv','hot','cool','gray'},...
               'Position', [20 340 100 50],...
               'Callback',@setmap);
    
    
    sld = uicontrol('Style', 'slider',...
            'Min',1,'Max',50,'Value',41,...
            'Position', [400 20 120 20],...
            'Callback', @surfzlim);
    
    e vengono eseguite quando l'utente seleziona un elemento dal popup menu o modifica lo slider.

    Per passare uno o più parametri alla funzione che genera la GUI puoi modificare la definizione della funzione introducendo il parametro "varargin"
    function myui(varargin)
    Così facendo si può invocare la funzione con un numero "qualunque" di parametri, es.:

    myui(var_1) dove var_1 è una variabile (scalare, arrat, matrice, stringa, definita nel workspace)

    myui('abcd',10)
    viene passata una stringa ed un valore (10)

    Al parametro varargin è associato automaticamente il parametro nargin nel quale viene memorizzato il numero di parametri inseriti nella chiamata alla funzione il che corrisponde al numero di elementi del cellarray varargin.

    Come detto, ho una versione più vecchia di MatLab per cui non so come vengono gestiti i parametri "source" e "callbackdata"; mi dispiace

    Se si utilizza GUIDE per la creazione della GUI, il meccanismo di scambio dati tra gli uicontrols può essere implementato usando la funzione "guidata".

    Hope this helps.
  • Re: Come dare variabili in input a una GUI

    Non devi dispiacerti anzi!! hai spiegato bene e chiarissimo e ora capisco un po di più sulle GUI! Grazie davvero tanto
Devi accedere o registrarti per scrivere nel forum
2 risposte