IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques Discussion :

Génération/suppression de boutons entre 2 GUIs


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 56
    Par défaut Génération/suppression de boutons entre 2 GUIs
    Bonjour,

    J'ai un souci lorsque je génère/supprime automatiquement des boutons dans un GUI secondaire (CHANNELS.fig/CHANNELS.m) à partir d'un GUI principal (bouton CHANNELS_NUMBER). La suppression est immédiate, par contre la génération de X bouton(s) est très lente, on peut voir successivement l'ajout de chaque bouton.
    => Je ne comprends pas pourquoi c'est aussi "lent" à s'afficher, est-ce mon utilisation de uicontrol(parent,...) qui est foireuse?
    => Je suis preneur de toute amélioration/simplification, merci!


    Code dans GUI_principal:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    function CHANNELS_NUMBER_Callback(hObject, eventdata, handles) 
    CHOIX=get(hObject,'String');
    if CHOIX < evalin('base','CHANNELS') 
     for i=1:evalin('base','CHANNELS')-CHOIX
    delete(findobj('Tag',['button_1(',num2str(evalin('base','CHANNELS')-i+1),')']));
    delete(findobj('Tag',['button_2(',num2str(evalin('base','CHANNELS')-i+1),')']));
    delete(findobj('Tag',['button_3(',num2str(evalin('base','CHANNELS')-i+1),')']));
    delete(findobj('Tag',['ALLOC_4',num2str(evalin('base','CHANNELS')-i+1)]));
    delete(findobj('Tag',['button_5(',num2str(evalin('base','CHANNELS')-i+1),')']));
    delete(findobj('Tag',['button_6(',num2str(evalin('base','CHANNELS')-i+1),')']));
     end
    elseif CHOIX > evalin('base','CHANNELS')
        y=88+evalin('base','CHANNELS')*49;
     for i=evalin('base','CHANNELS')+1:CHOIX
    %rajout des boutons dans le GUI CHANNELS
    uicontrol(CHANNELS,'style','pushbutton',...
                    'Position',[y 146 47 21],...
                    'String', ['CHAN', num2str(i)],...
                    'Tag',['button_1(',num2str(i),')'],...
                    'UserData', i, ...
                    'Backgroundcolor', [1 1 1]);
    uicontrol(CHANNELS,'style','popupmenu',...
                    'Position',[y 121 47 21],...
                    'String', {'OFF','ON'},...
                    'Tag',['button_2(',num2str(i),')'],...
                    'UserData', i, ...
                    'Backgroundcolor', [1 1 1]);
    uicontrol(CHANNELS,'style','edit',...
                    'Position',[y 70 47 21],...
                    'String', '-1000',...
                    'Tag',['button_3(',num2str(i),')'],...
                    'UserData', i, ...              
                    'Backgroundcolor', [1 1 1]);
    uicontrol(CHANNELS,'style','popupmenu',...
                    'Position',[y 95 47 21],...
                    'String', evalin('base','ALLOCATION'),...
                    'Tag',['button_4(',num2str(i),')'],...
                    'UserData', i, ...
                    'Backgroundcolor', [1 1 1]);
    uicontrol(CHANNELS,'style','popupmenu',...
                    'Position',[y 47 47 18],...
                    'FontSize',7,...
                    'FontName', 'Arial narrow', ... 
                    'Tag',['button_5(',num2str(i),')'],...
                    'String', {'2PSK','4PSK','8PSK','16PSK','QAM','CDMA','OFDM','CW'},...
                    'UserData', i, ...
                    'Backgroundcolor', [1 1 1]);
    uicontrol(CHANNELS,'style','edit',...
                    'Position',[y 20 47 21],...
                    'Tag',['button_6(',num2str(i),')'],...
                    'String', '0.3',...
                    'UserData', i, ...
                    'Backgroundcolor', [1 1 1]);   
         y=y+49;
        end
     end
    assignin('base', 'CHANNELS', CHOIX)
    guidata(CHANNELS, handles);

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Préalable :
    Par pitié dis-moi que tu utilises Simulink et que c'est pour ça que tu as besoin de la variables CHANNELS dans le workspace et que tu utilises EVALIN/ASSIGNIN ?
    (Car sinon je ne comprends pas l'intérêt)

    1. La variable CHANNELS utilisée dans les uicontrol vient d'où ?

    2. Quelques modifications avec commentaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    function CHANNELS_NUMBER_Callback(hObject, eventdata, handles)
    CHOIX=get(hObject,'String');
    Chanls = evalin('base','CHANNELS');%eviter de refaire le calcul à chaque fois
    handles = guidata(CHANNELS);%Mais d'ou viens cette variable par contre ?
    if CHOIX < Chanls
        for i=1:Chanls-CHOIX
            numero = num2str(Chanls-i+1);
            %Autant utiliser la structure handles
            delete(handles.(['button_1(',numero,')']));
            delete(handles.(['button_2(',numero,')']));
            delete(handles.(['button_3(',numero,')']));
            delete(handles.(['ALLOC_4',numero])); %bizarre en dessous le Tag est button_4(<numero>)
            delete(handles.(['button_5(',numero,')']));
            delete(handles.(['button_6(',numero,')']));
        end
    elseif CHOIX > Chanls
        y=88+Chanls*49;    
        alloc = evalin('base','ALLOCATION');
        for i=Chanls+1:CHOIX
            numero = num2str(i);
            %Creation des éléments communs à tous les uicontrol
            %Par defaut on les crée invisbles
            struct_commune = struct('Parent',CHANNELS,...
                'UserData', i, ...
                'Backgroundcolor', [1 1 1],...
                'Visible','off');
            %rajout des boutons dans le GUI CHANNELS
            uicontrol(struct_commune,...
                'style','pushbutton',...
                'Position',[y 146 47 21],...
                'String', ['CHAN', numero],...
                'Tag',['button_1(',numero,')']);
            uicontrol(struct_commune,...
                'style','popupmenu',...
                'Position',[y 121 47 21],...
                'String', {'OFF','ON'},...
                'Tag',['button_2(',numero,')']);
            uicontrol(struct_commune,...
                'style','edit',...
                'Position',[y 70 47 21],...
                'String', '-1000',...
                'Tag',['button_3(',numero,')']);
            uicontrol(struct_commune,...
                'style','popupmenu',...
                'Position',[y 95 47 21],...
                'String', alloc,...
                'Tag',['button_4(',numero,')']);
            uicontrol(struct_commune,...
                'style','popupmenu',...
                'Position',[y 47 47 18],...
                'FontSize',7,...
                'FontName', 'Arial narrow', ...
                'Tag',['button_5(',numero,')'],...
                'String', {'2PSK','4PSK','8PSK','16PSK','QAM','CDMA','OFDM','CW'});
            uicontrol(struct_commune,...
                'style','edit',...
                'Position',[y 20 47 21],...
                'Tag',['button_6(',numero,')'],...
                'String', '0.3');
            y=y+49;
        end
        %On les remet tous visibles en même temps
        h=get(CHANNELS,'Children');
        set(h,'Visible','on');
    end
    assignin('base', 'CHANNELS', CHOIX)
    guidata(CHANNELS, handles);

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 56
    Par défaut Génération/suppression de boutons entre 2 GUIs
    Oui, j'utilise Simulink d'où le besoin de variables sur le worspace et l'utilisation d'evalin/assignin.
    La variable CHANNELS dans les uicontrol vient d'une mauvaise compréhension: je croyais qu'il fallait mentionner le nom du GUI à adresser dans la fonction uicontrol pour la paramètre 'parent', étant donné que je génère/supprime les boutons dans un GUI#2 à partir d'un text edit du GUI#1.
    Par contre, le delete des boutons avec la structure handles ne marche pas (??? Reference to non-existent field 'button_1(11)'.) et ne peut pas fonctionner ainsi, mes boutons sont créés dans un GUI#2 alors que le contrôle (via text edit&fonction CHANNELS_NUMBER) est fait dans le GUI#1. Je ne sais pas si je suis clair...

  4. #4
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 56
    Par défaut Génération/suppression de boutons entre 2 GUIs
    C'est aussi pour cela que j'utilisais les delete(findobj('Tag','')) dans mon code initial. Est-ce qu'il y a une autre façon de procéder?

    Merci!

  5. #5
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Si FINDOBJ fonctionne tant mieux.

    Sinon oui j'ai juste oublié un truc pour la structure handles il était évident qu'elle ne pouvait pas prendre en compte les nouveaux boutons.

    Une solution qui devrait fonctionner (difficile à tester) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    function CHANNELS_NUMBER_Callback(hObject, eventdata, handles)
    %Prealable :
    %handles.button sera un tableau 6*CHOIX contenant les handles des boutons
    handles = guidata(gcf);
    CHOIX=get(hObject,'String');%nouveau nombre de boutons
    %Chanls : ancien nombre de boutons => ne sert plus à rien
    %correspond en fait au nombre de colonne de la structure handles.button
    %Verification prealable si on a encore rien créé :
    if ~isfield(handles,'button')
        Chanls = 0;
    else
        Chanls = size(handles.button,2);
    end
    %Chanls = evalin('base','CHANNELS');%eviter de refaire le calcul à chaque fois
     
    if CHOIX < Chanls
        %Suppression des boutons de CHOIX+1 à Chanls (donc à partir de CHOIX+1)
        delete(handles.button(:,CHOIX+1:end));
        handles.button(:,CHOIX+1:end) = [];%reinitialisation
    elseif CHOIX > Chanls
        %Ajout des boutons de Chanls+1 à CHOIX
        y=88+Chanls*49;    
        alloc = evalin('base','ALLOCATION');
        for i=Chanls+1:CHOIX
            numero = num2str(i);
            %Creation des éléments communs à tous les uicontrol
            %Par defaut on les crée invisbles
            struct_commune = struct('Parent',gcf,...
                'UserData', i, ...
                'Backgroundcolor', [1 1 1],...
                'Visible','off');
            %rajout des boutons dans le GUI CHANNELS
            handles.button(1,i) = uicontrol(struct_commune,...
                'style','pushbutton',...
                'Position',[y 146 47 21],...
                'String', ['CHAN', numero],...
                'Tag',['button_1(',numero,')']);
            handles.button(2,i) = uicontrol(struct_commune,...
                'style','popupmenu',...
                'Position',[y 121 47 21],...
                'String', {'OFF','ON'},...
                'Tag',['button_2(',numero,')']);
            handles.button(3,i) = uicontrol(struct_commune,...
                'style','edit',...
                'Position',[y 70 47 21],...
                'String', '-1000',...
                'Tag',['button_3(',numero,')']);
            handles.button(4,i) = uicontrol(struct_commune,...
                'style','popupmenu',...
                'Position',[y 95 47 21],...
                'String', alloc,...
                'Tag',['button_4(',numero,')']);
            handles.button(5,i) =uicontrol(struct_commune,...
                'style','popupmenu',...
                'Position',[y 47 47 18],...
                'FontSize',7,...
                'FontName', 'Arial narrow', ...
                'Tag',['button_5(',numero,')'],...
                'String', {'2PSK','4PSK','8PSK','16PSK','QAM','CDMA','OFDM','CW'});
            handles.button(6,i) = uicontrol(struct_commune,...
                'style','edit',...
                'Position',[y 20 47 21],...
                'Tag',['button_6(',numero,')'],...
                'String', '0.3');
            y=y+49;
        end
        %On les remet tous visibles en même temps    
        set(handles.button,'Visible','on');
    end
    assignin('base', 'CHANNELS', CHOIX)
    guidata(gcf, handles);

  6. #6
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 56
    Par défaut
    Merci pour la réponse, toutefois j'ai plusieurs questions sur ce code:
    1) "%rajout des boutons dans le GUI CHANNELS" => Les boutons sont rajoutés sur le GUI1 "principal", où s'effectue le choix du nombre de channels, au lieu d'être affichés sur le GUI2 "CHANNELS" comme voulu. Je ne vois aucune mention du GUI2 CHANNELS dans le code du GUI1, je ne comprends pas...?

    2) code du GUI1 principal "test":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
    function varargout = test(varargin)
    % TEST M-file for test.fig
    %      TEST, by itself, creates a new TEST or raises the existing
    %      singleton*.
    %
    %      H = TEST returns the handle to a new TEST or the handle to
    %      the existing singleton*.
    %
    %      TEST('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in TEST.M with the given input arguments.
    %
    %      TEST('Property','Value',...) creates a new TEST or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before test_OpeningFunction gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to test_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 test
    
    % Last Modified by GUIDE v2.5 09-Aug-2009 18:05:45
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @test_OpeningFcn, ...
                       'gui_OutputFcn',  @test_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 test is made visible.
    function test_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 test (see VARARGIN)
    
    % Choose default command line output for test
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes test wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    function varargout = test_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
    varargout{1} = handles.output;
    CHANNELS; %ouverture du GUI2 CHANNELS
    
    
    function CHANNELS_NUMBER_Callback(hObject, eventdata, handles)
    % hObject    handle to CHANNELS_NUMBER (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: get(hObject,'String') returns contents of CHANNELS_NUMBER as text
    %        str2double(get(hObject,'String')) returns contents of CHANNELS_NUMBER as a double
    
    CHOIX=str2double(get(hObject,'String'));
    Chanls = evalin('base','CHANNELS');
    handles = guidata(CHANNELS); %CHANNELS=> GUI2
    if CHOIX < Chanls
        for i=1:Chanls-CHOIX
            numero = num2str(Chanls-i+1);
    delete(findobj('Tag',['button_1(',numero,')']));
    delete(findobj('Tag',['button_2(',numero,')']));
    delete(findobj('Tag',['button_3(',numero,')']));
    delete(findobj('Tag',['button_4(',numero,')']));
    delete(findobj('Tag',['button_5(',numero,')']));
    delete(findobj('Tag',['button_6(',numero,')']));
        end
    elseif CHOIX > Chanls
        y=88+Chanls*49;    
        alloc = evalin('base','ALLOCATION');
        for i=Chanls+1:CHOIX
            numero = num2str(i);
            struct_commune = struct('Parent',CHANNELS,...
                'UserData', i, ...
                'Backgroundcolor', [1 1 1],...
                'Visible','off');
            handles.button_1(i)= uicontrol(struct_commune,...
                'style','pushbutton',...
                'Position',[y 146 47 21],...
                'String', ['CHAN', numero],...
                'Tag',['button_1(',numero,')']);
            handles.button_2(i)=uicontrol(struct_commune,...
                'style','popupmenu',...
                'Position',[y 121 47 21],...
                'String', {'OFF','ON'},...
                'Tag',['button_2(',numero,')']);
            handles.button_3(i)=uicontrol(struct_commune,...
                'style','edit',...
                'Position',[y 70 47 21],...
                'String', '-1000',...
                'Tag',['button_3(',numero,')']);
            handles.button_4(i)=uicontrol(struct_commune,...
                'style','popupmenu',...
                'Position',[y 95 47 21],...
                'String', alloc,...
                'Tag',['button_4(',numero,')']);
            handles.button_5(i)=uicontrol(struct_commune,...
                'style','popupmenu',...
                'Position',[y 47 47 18],...
                'FontSize',7,...
                'FontName', 'Arial narrow', ...
                'Tag',['button_5(',numero,')'],...
                'String', {'2PSK','4PSK','8PSK','16PSK','QAM','CDMA','OFDM','CW'});
            handles.button_6(i)=uicontrol(struct_commune,...
                'style','edit',...
                'Position',[y 20 47 21],...
                'Tag',['button_6(',numero,')'],...
                'String', '0.3');
            y=y+49;
        end
        %On les remet tous visibles en même temps
        h=get(CHANNELS,'Children');
        set(h,'Visible','on');
    end
    assignin('base', 'CHANNELS', CHOIX)
    guidata(CHANNELS, handles);
    3) code du GUI2 "CHANNELS":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    function varargout = CHANNELS(varargin)
    % CHANNELS M-file for CHANNELS.fig
    %      CHANNELS, by itself, creates a new CHANNELS or raises the existing
    %      singleton*.
    %
    %      H = CHANNELS returns the handle to a new CHANNELS or the handle to
    %      the existing singleton*.
    %
    %      CHANNELS('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in CHANNELS.M with the given input arguments.
    %
    %      CHANNELS('Property','Value',...) creates a new CHANNELS or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before CHANNELS_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to CHANNELS_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 CHANNELS
     
    % Last Modified by GUIDE v2.5 28-Jul-2009 09:10:04
     
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @CHANNELS_OpeningFcn, ...
                       'gui_OutputFcn',  @CHANNELS_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 CHANNELS is made visible.
    function CHANNELS_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 CHANNELS (see VARARGIN)
     
    % Choose default command line output for CHANNELS
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
    % UIWAIT makes CHANNELS wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
     
     
    % --- Outputs from this function are returned to the command line.
    function varargout = CHANNELS_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
    varargout{1} = handles.output;
     
        y=0;
        for i=1:evalin('base','CHANNELS')
         handles.button_1(i)=uicontrol('style','pushbutton',...
                    'Position',[88+y 146 47 21],...
                    'String', ['CHAN', num2str(i)],...
                    'Tag',['button_1(',num2str(i),')'],...
                    'UserData', i, ...
                    'Backgroundcolor', [1 1 1]);
         handles.button_2(i)=uicontrol('style','popupmenu',...
                    'Position',[88+y 121 47 21],...
                    'String', {'OFF','ON'},...
                    'Tag',['button_2(',num2str(i),')'],...
                    'UserData', i, ...
                    'Backgroundcolor', [1 1 1]);
         handles.button_3(i)=uicontrol('style','edit',...
                    'Position',[88+y 70 47 21],...
                    'String', '-1000',...
                    'Tag',['button_3(',num2str(i),')'],...
                    'UserData', i, ...
                    'Backgroundcolor', [1 1 1]);
         handles.button_4(i)=uicontrol('style','popupmenu',...
                    'Position',[88+y 95 47 21],...
                    'String', evalin('base','ALLOCATION'),...
                    'Tag',['button_4(',num2str(i),')'],...
                    'UserData', i, ...
                    'Backgroundcolor', [1 1 1]);
         handles.button_5(i)=uicontrol('style','popupmenu',...
                    'Position',[88+y 47 47 18],...
                    'FontSize', 7, ...
                    'FontName', 'Arial narrow', ...
                    'Tag',['button_5(',num2str(i),')'],...
                    'String', {'2PSK','4PSK','8PSK','16PSK','QAM','CDMA','OFDM','CW'},...
                    'UserData', i, ...
                    'Backgroundcolor', [1 1 1]);
         handles.button_6(i)=uicontrol('style','edit',...
                    'Position',[88+y 20 47 21],...
                    'String', '-174',...
                    'Tag',['button_6(',num2str(i),')'],...
                    'UserData', i, ...
                    'Backgroundcolor', [1 1 1]);       
               y=y+49;
     
        end
    => ça "marchote" pas trop mal, sauf pour récupérer dans le GUI1 les saisies effectuées sur le GUI2 "CHANNELS". Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     get(findobj('tag','button_2'),'value')
    dans le GUI1, j'obtiens
    ans = []
    , ce qui n'est pas le status des button_2! Toujours dans le GUI1, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     get(handles.button_2,'value')
    , j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     ??? Reference to non-existent field 'button_2'.
     
    Error in ==> test>pushbutton1_Callback at 172
    get(handles.button_2,'value')
     
    Error in ==> gui_mainfcn at 95
            feval(varargin{:});
     
    Error in ==> test at 42
        gui_mainfcn(gui_State, varargin{:});
     
    ??? Error using ==> test('pushbutton1_Callback',gcbo,[],guidata(gcbo))
    Reference to non-existent field 'button_2'.
     
    ??? Error while evaluating uicontrol Callback
    Help!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Math / Random] Génération nombre aléatoire compris entre deux bornes
    Par oligig dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 30/06/2013, 17h23
  2. Suppression d'une entrée en fonction d'un checkbox
    Par Sieldev dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/12/2006, 13h38
  3. JSP : Suppression d'une entrée dans un tableau html
    Par ze veritable farf dans le forum Servlets/JSP
    Réponses: 34
    Dernier message: 11/04/2006, 16h17
  4. Submit et bouton entrée
    Par Canou dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 20/10/2004, 16h45
  5. Suppression de bouton
    Par Argonz dans le forum C++Builder
    Réponses: 7
    Dernier message: 09/12/2003, 08h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo