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

Problem mit speichern von figures in GUI

 

Eyken
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2013, 10:22     Titel: Problem mit speichern von figures in GUI
  Antworten mit Zitat      
Hallo,

ich möchte gerne einen (oder mehrere) Graphen plotten, darstellen und abspeichern.

Die Haupt-GUI ruft eine Neben-GUI auf, welche als Schaufenster des Graphen dienen soll. Ein Klick auf einen Button ruft die Neben-GUI auf.

Ich habe schon sehr viele Ansätze ausprobiert, aber jedes mal treten andere Probleme auf (z.B. die gespeicherte bmp-Datei zeigt nebem dem eigentlichen Graphen Teile der Haupt-GUI!)

Folgender Quelltext findet sich direkt nach der Opening-Fkt. und der guidata(...), also soll direkt nach öffnen der Nebengui ausgeführt werden:

Code:
fame=guidata(famegui);% getting the handles from the main m-file
txtPath=get(fame.filein,'String');
path2folder=txtPath;



% axes(handles.axesfig1); % geht nicht
% set(0, 'CurrentFigure', handles.fig1); % geht auch nicht
x=1:0.1:20;
y=sin(x);
hold on
h=plot(x,y);
hold off

savepatht=strcat(path2folder,'test','.bmp');

saveas(h,savepatht);

close


Erläuterungen:
famegui: Name der Hauptgui
fig1: Name der Nebengui
Die ersten drei zeilen dienen nur zum erhalten des Speicherpfades.

Irgendwie funktioniert der axes-Befehl nicht. Das Problem ist scheinbar, dass auf die Hauptgui referenziert wird, die keine Achse mit diesem Namen hat.

Wie kann ich denn die aktuelle GUI festlegen und ansprechen?
Ich habe es mit dem set(0,...)-Befehl versucht, aber auch das geht nicht.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.04.2013, 10:44     Titel: Re: Problem mit speichern von figures in GUI
  Antworten mit Zitat      
Hallo Eyken,

Was bedeutet "geht nicht" im Detail?
Wenn "fame=guidata(famegui)" die handles von Main-GUI holt, woher kommt dann "handles.axesfig1"?
Statt das aktive AXES-Objekt zu setzen, ist es sicherer, das Parent-Objekt direkt anzugeben:
Code:
plot(x, y, 'Parent', handles.axesfig1);


Bemerkung: Pfade per STRCAT aneinander zu hängen führt zu oft Problemen mit dem File-Separator. Besser:
Code:
savepatht = fullfile(path2folder, ['test','.bmp']);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Eyken
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2013, 10:54     Titel:
  Antworten mit Zitat      
Danke erstmal Smile

Also der ganze Quelltext befindet sich in der Nebengui.
"handles.axesfig1" soll sich auf eine figure in dieser Nebengui beziehen.

Komischerweise funktioniert der Quelltext nun doch! Aber ohne etwas wesentliches verändert zu haben. Ich weiß selbst, dass das nicht sein kann, habe mich daher irgendwie vielleicht vertippt.


Also: Wenn ich in einer GUI bin, die durch eine andere GUI aufgerufen wurden ist, wie spreche ich dann die handles dieser aufgerufenen GUI in dieser an? kann ich einfach handles.xxx verwenden oder beziehe ich mich dann auf die main-GUI? Gibt es denn einen Befehl der die aktuell aufgerufenen GUI als "current figure" setzt? Ich habe oft schon die Erfahrung gemacht, dass, z.B., close(gcf) nicht funktioniert oder die Haupt-gui schließt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Eyken
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2013, 13:36     Titel:
  Antworten mit Zitat      
Nachtrag:

Also ich habe das Problem weiter eingegrenzt:

Wenn ich in meiner Nebengui (die als Darstellungsfenster dient):

axes(handles.axes1);

eingebe, dann wird zwar die das Bild richtig dargestellt und auch abgespeichert, aber es kommt eine Fehlermeldung:

-----------------------------------------------------
Attempt to reference field of non-structure array.

Error in figa>figa_OutputFcn (line 115)
varargout{1} = handles.output;

Error in gui_mainfcn (line 265)
feval(gui_State.gui_OutputFcn, gui_hFigure, [], gui_Handles);

Error in figa (line 42)
gui_mainfcn(gui_State, varargin{:});

Error in analyze (line 240)
figa;

Error in famegui>analyzebut_Callback (line 209)
analyze(hObject, handles);

Error in gui_mainfcn (line 96)
feval(varargin{:});

Error in famegui (line 42)
gui_mainfcn(gui_State, varargin{:});

Error in @(hObject,eventdata)famegui('analyzebut_Callback',hObject,eventdata,guidata(hObject))


Error while evaluating uicontrol Callback
-----------------------------------------------------
Ohne den Befehl erscheint der Graph im Hauptgui und wird auch fehlerhaft abgespeichert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.04.2013, 14:08     Titel:
  Antworten mit Zitat      
Hallo Eyken,

Zitat:
Also ich habe das Problem weiter eingegrenzt:

Hast Du das? Zunächst war gar nicht von einer Fehlermeldung die Rede.

Zitat:
Attempt to reference field of non-structure array.

Das heißt, dass die Variable "handles" hier gar kein Struct ist. Dann verwende doch den debugger um herauszufinden, weshalb nicht:
Code:


Zitat:
Ohne den Befehl erscheint der Graph im Hauptgui und wird auch fehlerhaft abgespeichert.

Ohne welchen Befehl und was bedeutet "fehlerhaft abgespeichert"? Bitte lasse uns so wenig wie möglich raten.

Zitat:
Wenn ich in einer GUI bin, die durch eine andere GUI aufgerufen wurden ist, wie spreche ich dann die handles dieser aufgerufenen GUI in dieser an?

Mir wird nicht klar, wessen handles-Struct Du nun ansprechen möchtest. Man kann sehr einfach in allen Callbacks eines GUI auf die handles dieser GUI zugreifen:
Code:
handles = guidata(hObject);

Man kann aber nicht ohne weiteres auf die daten der anderen GUIs zugreifen, z.B. den "MainGUIs". Dafür benötigt man einen handle derselben, den man z.B. bei Erstellen der Sub-GUIs einmalig per TAGB sucht oder als Input-Argument übergibt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Eyken
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2013, 14:14     Titel:
  Antworten mit Zitat      
"Fehlerhafte Abspeicherung" heißt, dass sich in der bmp-Datei der Graph und überlagert Teile (buttons) der main-GUI finden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Eyken
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 17.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.04.2013, 15:00     Titel:
  Antworten mit Zitat      
Also, ich habe vergessen zu erwähnen, dass die plot-Fkt. nicht das "Original" von mtlab ist, sondern aus einer externen library stammt.

Ich war der Überzeugung, dass dies keinen Einfluss auf Befehle, wie z.B. axes(), haben sollte. Wohl lag ich in dieser Annahme falsch.


Habe das Problem nun behoben, in dem ich die main-GUI aufrufe um Werte einzulesen und nachdem ein Knopf gedrück wurden ist, wird die GUI geschlossen und der Prozess (Werte lesen, plotten, speichern) läuft ab. Danach wird die GUI automatisch selbst aufgerufen.


Trotzdem Danke für die Hilfe, nun habe ich etwas mehr Verständnis über die GUI´s erlangt. Very Happy
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 - 2025 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.