Verfasst am: 05.03.2016, 09:22
Titel: Subgui in uitab von Maingui
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');
switchget(hObject,'Title') case 'Signal 1 laden'
ifstrcmp(handles.Data.uipickfilesS1,'off') % call only onetime
OpenSignal_Callback
handles.Data.uipickfilesS1 = 'on';
end case 'Signal 2 laden'
ifstrcmp(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...
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?
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.
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'. ifisempty(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
...womit dann uipickfiles beendet wird und das Programm in die Callback der Maingui zurückkehrt.
Gruß DSP
Einstellungen und Berechtigungen
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
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.