WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Subgui in uitab von Maingui

 

DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 05.03.2016, 09:22     Titel: Subgui in uitab von Maingui
  Antworten mit Zitat      
Hallo goMatlab Forum,

zur Auswahl und Öffnen von Signalen in *.mat files nutze ich eine etwas abgeänderte Form der uipickfiles Funktion aus dem Mathworks File Exchange.

Normalerweise hat diese GUI ein eigenes figure. Ich möchte uipickfiles jedoch gern in einen Tab meiner Maingui einbetten. Soweit hat das auch funktioniert (siehe Anhang).

Beim ersten Öffnen des Tabs wird uipickfiles gestartet:

Code:

function UserSelTab(varargin)
        % get selected tab of tabgroup
        hObject = get(handles.tabgp,'SelectedTab');

        switch get(hObject,'Title')
            case 'Signal 1 laden'
                if strcmp(handles.Data.uipickfilesS1,'off')
                    % call only onetime
                    OpenSignal_Callback
                    handles.Data.uipickfilesS1 = 'on';
                end
            case 'Signal 2 laden'
                if strcmp(handles.Data.uipickfilesS2,'off')
                    % call only onetime
                    OpenCompareSignal_Callback
                    handles.Data.uipickfilesS2 = 'on';
                end                
            otherwise
                % nothing
        end
    end
 


Für das Laden von Signal 1 wird die Funktion OpenSignal_Callback aufgerufen, welche dann uipickfiles startet.

Code:
% Load Signal 1
   function OpenSignal_Callback(varargin)
        handles.Data.NumSignals = 1;

        % select Data -> open uipickfiles
        [path,names,Fs,handles.Data.Signal1.history] = ...
            uipickfiles('FilterSpec',[handles.UIPath,'\*.mat'],...
                        'Lang',handles.langPackUI,...
                        'Append',handles.Data.Signal1.history,...
                        'Prompt','Wähle Daten für Signal 1 aus',...
                        'hTab',handles.TabLoadSignal1);            
                   
        if ~isempty(path)
           % verarbeite ausgewählte Dateien...

        end
   end



Nun zu meinem eigentlich Problem. Ursprünglich wurde uipickfiles nach dem Erzeugen aller Objekte in den Zustand
Code:
uiwait(figure_handle)
gesetzt. Somit blieb auch meine Maingui in der Funktion "OpenSignal_Callback" stehen, bis uipickfiles geschlossen wurde. Allerdings kann man für einen Tab nicht uiwait verwenden. Es werden also nur alle Objekte erzeugt und anschließend "OpenSignal_Callback" durchlaufen und beendet.

Es gibt in uipickfiles zwei Button "Fertig" und "Abbrechen", welche entweder den/die ausgewählten *.mat Files zurückgeben oder nichts. Mein Problem ist nun, dass diese Funktionsrückgabe "ins Leere" läuft, da sich die Maingui nicht mehr in "OpenSignal_Callback" befindet.

Hat jemand eine Idee wie ich das Problem lösen kann? Evtl. die zwei Button "Fertig" und "Abbrechen" nicht in der subgui uipickfiles sondern in der Maingui definieren?

Schon mal vielen Dank für eure Hilfe!

Gruß DSP

Subgui_in_Tab_of_maingui.png
 Beschreibung:

Download
 Dateiname:  Subgui_in_Tab_of_maingui.png
 Dateigröße:  84.98 KB
 Heruntergeladen:  465 mal
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 05.03.2016, 12:07     Titel:
  Antworten mit Zitat      
Statt dem uiwait kann ich
Code:
waitfor(tab_handle)
verwenden um in der uipickfiles Funktion zu bleiben. Aber wie hebe ich das nun wieder auf, wenn entweder der Button "Fertig" oder "Abbrechen" angeklickt wurde?

Wenn ich die Doku zu waitfor richtig verstehe, kann man so lange warten lassen, bis eine Änderung einer festgelegten Eigenschaft von tab_handle eintritt.

Code:
waitfor(h,PropertyName,PropertyValue)


Aber da gäbe es wohl nur UserData bei uitab , welche ich verändern kann.

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 05.03.2016, 12:14     Titel:
  Antworten mit Zitat      
Problem selbst gelöst Very Happy

Code:

% wait in uipickfiles until Button Done or Cancel pressed
waitfor(fig,'UserData')


Und in den Callbacks der Button ändere ich UserData von 0 auf 1

Code:

   function done(varargin)
      % Optional shortcut: click on a file and press 'Done'.
      if isempty(full_file_picks) && strcmp(get(addbut,'Enable'),'on') %#ok<ALIGN>
            add();
        end      
       
        % save selected files in output
        prop.output = 'cell';    
       
        % change UserData to resume uipickfiles
        set(fig,'UserData',1)
   end

   function cancel(varargin)
        % no output
      prop.output = 'cancel';
       
        % change UserData to resume uipickfiles
        set(fig,'UserData',1)
   end
 


...womit dann uipickfiles beendet wird und das Programm in die Callback der Maingui zurückkehrt.

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.