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

Probleme mit GUI1 -> GUI2 -> GUI3 -> Graphen speich

 

JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 19.12.2014, 19:06     Titel:
  Antworten mit Zitat      
Die Figure bleibt leer und für FindAxes steht unter Value der Wert 177.0182.

Ja werde ich dann glaube ich machen müssen.

____________________________________________

Hier das Minimalbeispiel.

Nur Plot und Save button funktionieren.

Das Ganze muss über PltBacRes.m gestartet werden.

Danke im Voraus.

Minimalbeispiel.zip
 Beschreibung:

Download
 Dateiname:  Minimalbeispiel.zip
 Dateigröße:  17.65 KB
 Heruntergeladen:  426 mal
Private Nachricht senden Benutzer-Profile anzeigen


JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 28.12.2014, 15:54     Titel:
  Antworten mit Zitat      
Hallo,

hoffe ihr hattet alle ein schönes Fest gehabt.

Ich wollt mal fragen ob jemand mit Hilfe des Minimalbeispiels was herausfinden konnte?

Ich hab mein Problem leider noch nicht lösen können.

Danke im Voraus.

Und falls man sich nicht mehr schreibt, einen guten Rutsch ins neue Jahr.

Gruß
JaSoIstEs
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2014, 16:08     Titel:
  Antworten mit Zitat      
Hallo,

unter Minimalbeispiel verstehe ich etwas anderes.

Vor allem: was ist in welcher Reihenfolge zu klicken, und was funktioniert nicht wie gewünscht? Inwiefern nicht?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 28.12.2014, 16:55     Titel:
  Antworten mit Zitat      
Naja hab versucht das ganze auf das "Minimalste" zu verkleinern, ohne das Ergebnis zu "fälschen".

____________________________________________________________
Aneitung:

1. PltBacRes.m starten (GUI öffnet sich)
2. In der GUI auf Plot-Button drücken (In der dort vorhanden axes erscheint jetzt ein Sinus)
3. Save-Graph Button drücken (hier sollte eigentlich dieser Sinus gespeichert werden können)
____________________________________________________________

Der nicht funktionierende Code befindet sich in der PltBacResAct.m in Zeile 48-62 (Das ist das worüber wir auf Seite 1 diskutiert haben)
Code:

function [] = SaveGraphButton()
%handles         = guidata(PltBacRes);

data            = get(gcf,'UserData')
FindAxes         = findobj(0,'Tag','axes1');

f = figure('visible','off');
f_copy = axes;
copyobj(allchild(FindAxes),f_copy);
colorbar
grid on
 [filename,pathname] = uiputfile({'*.jpg;*.tif;*.png;*.gif;*.fig','All Image Files';...
    '*.*','All Files' },'Save Image');
 saveas(f,[pathname,filename],'jpg');
close(figure)
 


In der PltBacResAct.m sind sozusagen die Callbacks der Elemente aus der GUI.

Danke im Voraus.

(Hoffe du kannst damit jetzt was anfangen. Wenn noch was fehlt oder etwas nicht klar ist einfach schreiben)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2014, 17:17     Titel:
  Antworten mit Zitat      
Hallo,

der einfachste Weg:
die Figure mit GUIDE öffnen,
das Koordinatensystem doppelklicken,
die Eigenschaft 'NextPlot' auf 'replacechildren' stellen.

Hintergrund:
bei deinem plot-Befehl werden bisher alle Eigenschaften des Koordinatensystems, also auch die Tag-Eigenschaft, zurückgesetzt. Damit ist es schwierig, das Koordinatensystem zu "finden". Das wird durch obiges verhindert.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 28.12.2014, 19:12     Titel:
  Antworten mit Zitat      
Hallo,
Dane für die hilfreiche Antwort.

Also das was du vorgeschlagen hast funktioniert für den Fall das ich die GUI nicht über eine andere aufrufe.

Sobald ich die GUI über eine andere GUI (bzw. GUI1->GUI2->GUI3) aufrufe bekomme ich folgenden Fehler:
__________________________________________
Error using copyobj
Invalid child handle argument

Error in PltBacResAct>SaveGraphButton (line 5196)
copyobj(allchild(FindAxes),f_copy);

Error in PltBacResAct (line 108)
SaveGraphButton

Error while evaluating uicontrol Callback
__________________________________________

Wahrscheinlich bin ich grad zu blöd die GUI-handles zu übergeben oder ?

Danke im Voraus

_______________________________________________________________

Update:
Habe den Code wie folgt umgeschrieben:

Code:

function [] = SaveGraphButton()

handles         = guidata(PltBacRes);
 
data            = get(gcf,'UserData')

f = figure('visible','off');
f_copy = axes;
copyobj(allchild(handles.axes1),f_copy);
colorbar
grid on
 [filename,pathname] = uiputfile({'*.jpg;*.tif;*.png;*.gif;*.fig','All Image Files';...
    '*.*','All Files' },'Save Image');
 saveas(f,[pathname,filename],'jpg');
close(figure)
 


So funktioniert das jetzt. Aber ich glaube du hast mal erwähnt das, dass so nicht ganz gesund ist oder ?



_______________________________________________________________
Update2:

Sobald ich einmal die Kenngröße (In der GUI mit dem PLOT) ändere und dann plotten will verliert er "unterwegs" die handles wieder. Sorry aber irgendwie Blicke ich da anscheinend nicht so ganz durch.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2014, 19:55     Titel:
  Antworten mit Zitat      
Hallo,

genau. Ich würde zumindest das Handle auf die GUI übergeben.

Woran es nun genau scheitert, kann ich (wieder einmal) nicht sagen, ohne das zu testen oder zumindest den gesamten relevanten Code zu sehen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 28.12.2014, 20:16     Titel:
  Antworten mit Zitat      
Mach ich das denn nicht mit der folgenden Zeile

Code:

handles         = guidata(PltBacRes);
 


bzw. ich hol mir doch hier jedes mal die handles sobald ich den Save Graph Button verwende oder verstehe ich das falsch.


Oder wie meinst du das mit "Handle auf die GUI übergeben". Kannst du mir da mal einen Code beispiel zeigen/geben.


Wenn du interessiert bist und Lust hast kann ich dir mal den vollständigen Code schicken.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2014, 20:27     Titel:
  Antworten mit Zitat      
Hallo,

das Thema hatten wir doch schon.
Mit dieser Zeile rufst du den Öffnungscode der GUI von vorne auf. Ich meine jedoch, das Handle auf die GUI (meist handles.figure1) zu übergeben, um dann mit guidata wieder an die Handles heranzukommen.

Code:
gui_handle = handles.figure1;
gui2(gui_handle)
 

mit
Code:
function gui2(gui1_handle)
all_handles_gui1 = guidata(gui1_handles);


Und ja, Code anhanddessen man das Problem reproduzieren kann, wäre hilfreich. Je weniger Code dazu nötig ist, desto lieber.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 29.12.2014, 14:05     Titel:
  Antworten mit Zitat      
Mal eine blöde Frage...

Gibt es irgendwie eine begrenzung o.Ä. wie oft ich auf einen 'Tag' in einer GUI zugreifen kann ?

Hab das Ganze auf einer andere Art zu lösen, nur so zum probieren...
Es funktioniert auch, zumindest die ersten 2 mal.
Sprich, ich plotte einmal und dann kann ich es speichern, plotte das zweite mal ich kann es speichern, plotte ich aber jetzt ein drittes mal kann ich es nicht mehr speichern bzw. die jpg is leer.
Hab es mal mit debuggen versucht und jedes mal geschaut was unter:

Code:

FindAxes         = findobj(0,'Tag','axes1');
 


für FindAxes gespeichert wird.
Beim 1. mal findet er die axes1 und hat den Inhalt 170
Beim 2. mal findet er die axes1 und hat den Inhalt 170
Beim 3. mal findet er die axes1 nicht und hat den Inhalt [].


Habe es jetzt mal mit einem Toggle Button versucht dieser gibt mir eine 1 oder 0 wenn der user den Plot speichern will oder nicht.
Und auch alles in die selbe Funktion. Für jeden Plot habe ich jetzt im Prinzip die ganze save Geschichte drin.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.12.2014, 15:10     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Gibt es irgendwie eine begrenzung o.Ä. wie oft ich auf einen 'Tag' in einer GUI zugreifen kann ?

Kann ich mir nicht vorstellen.

Zitat:
Beim 1. mal findet er die axes1 und hat den Inhalt 170
Beim 2. mal findet er die axes1 und hat den Inhalt 170
Beim 3. mal findet er die axes1 nicht und hat den Inhalt [].

Wird zwischen 2. und 3. Mal genau dasselbe gemacht wie zwischen 1. und 2. Mal?

Geh mal mit dem Debugger wirklich schrittweise durch und schaue genau, wann das Koordinatensystem nicht mehr gefunden wird.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 29.12.2014, 18:06     Titel:
  Antworten mit Zitat      
Hab es jetzt nochmal untersucht.
Leider ist nichts festzustellen...Außer das sich der Wert von FindAxes bei jedem Neustart des codes verändert. Ist das normal ? Also er bleibt zwar konstant solange ich das Programm nicht schließe.

Egal welche Variablen ich zum Plotten nehme der Vorgang bleibt immer gleich.

Der Vorgang sieht wie folgt aus:
1.Daten der ausgewählten Variable holen
2.Finde das Koordinatensystem
3.Plotten
4.Speichern des Plots vom gefundenen Koordinatensystems
5. Funktion ist zu Ende Alle Daten aus dem Workspace werden gelöscht

Das geht genau für zwei mal Plotten und Speichern und dann beim dritten mal findet er die axes nicht mehr.

_______________________________________________________________
UPDATE:
Hab jetzt mein Minimalbeispiel so umgebaut das es so aussieht (zumindest von den funktionen des anderen) wie der eigentliche Code und hier funktioniert alles einbahnfrei. Ich kann es mir einfach nicht erklären.
Das einzige was ich in meinem eigentlich Code anders mache ist das ich eine Mat-File lade und die Daten dort raushole, Das kann aber kein Einfluss auf die GUI haben oder nicht ?! Ich blick da einfach nicht mehr durch.

Funktioniert wie vorher nur das ich jetzt noch die Radio-Buttons.
-Frequency
-Vline(rms)
-Efficiency

aktiviert habe jedes plottet ein Sinus in einer anderen Farbe.

(Nebenbemerkung: Das Minimalbeispiel wurde auf einem Mac programmiert und getestet, ich weiß nicht ob das eine Rolle in diesem Fall spielt)

Minimalbeispiel.zip
 Beschreibung:

Download
 Dateiname:  Minimalbeispiel.zip
 Dateigröße:  283.44 KB
 Heruntergeladen:  414 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 29.12.2014, 20:29     Titel:
  Antworten mit Zitat      
Und hier nochmal das Minimalbeispiel mit toggle button anstatt Pushbutton.
Mit togglebutton (SAVE-GRAPH) lässt sich das speichern aktivieren bzw. deaktivieren. Default Zustand ist Speichern.
Wenn man jetzt auf Plot drückt und das speichern aktiviert ist dann kommt direkt nach dem Plot ein dlginput fenster für das Speichern.

Aber auch das funktioniert nur im Minibeispiel ohne das Laden und Verarbeiten der Mat-File.

Question Question Question

Minimalbeispiel togglebutton.zip
 Beschreibung:

Download
 Dateiname:  Minimalbeispiel togglebutton.zip
 Dateigröße:  284.04 KB
 Heruntergeladen:  396 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.12.2014, 20:31     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Außer das sich der Wert von FindAxes bei jedem Neustart des codes verändert. Ist das normal ?

Ja.

Zitat:
Das geht genau für zwei mal Plotten und Speichern und dann beim dritten mal findet er die axes nicht mehr.

Kann ich so nicht reproduzieren.

Zitat:
Hab jetzt mein Minimalbeispiel so umgebaut das es so aussieht (zumindest von den funktionen des anderen) wie der eigentliche Code und hier funktioniert alles einbahnfrei. Ich kann es mir einfach nicht erklären.

Irgendetwas dürfte anders sein.

Zitat:
Das einzige was ich in meinem eigentlich Code anders mache ist das ich eine Mat-File lade und die Daten dort raushole, Das kann aber kein Einfluss auf die GUI haben oder nicht ?!

Das an sich sollte keinen Einfluss darauf haben.
Teste es doch so, dass du in deinem tatsächlichen Code das Laden der Daten durch das Erstellen einer Zufallsmatrix o.ä. ersetzt - dann wirst du's ja sehen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 29.12.2014, 21:23     Titel:
  Antworten mit Zitat      
Damit du mal den Fehler reproduzieren kannst lad ich jetzt mal meinen vollständigen Code hoch.

Einmal die Version mit dem Push-Button:
Hier tritt der Fehler auf das ich nur einmal einen Plot speichern kann und dann findet er die Axes nicht mehr und speichert leere Bilder.

Und dann die Version mit dem Toggle-Button.
Hier tritt der Fehler auf das erster Plot gespeichert wird zweiter auch noch gespeichert wird und wenn man dann weiter machen will werden nur noch leere Bilder gespeichert.

Ist jetzt leider sehr viel Code enthalten, sorry. Hoffe du kannst dich trotzdem mal durchwühlen. Im Grundegenommen ist alles wie in den "Minimalbeispielen" nur das hier noch die Matrix mit allen Simulationsdaten verarbeitet wird.

Hinweis:
In der PltBacSetUp.mat sind zwei Pfade gespeichert, die musst du vorher anpassen.

Vielen vilen Dank im Voraus.

Own_Code_ToggleButton_Fehlerhaft.zip
 Beschreibung:

Download
 Dateiname:  Own_Code_ToggleButton_Fehlerhaft.zip
 Dateigröße:  43.47 KB
 Heruntergeladen:  377 mal
Own_Code_Pushbutton_Fehlerhaft.zip
 Beschreibung:

Download
 Dateiname:  Own_Code_Pushbutton_Fehlerhaft.zip
 Dateigröße:  84.87 KB
 Heruntergeladen:  407 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3  Weiter

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.