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

Button für Abfrage/ Dialogbox

 

creme
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 23.10.2020, 11:17     Titel: Button für Abfrage/ Dialogbox
  Antworten mit Zitat      
Hallo,

ich habe in meiner GUI einen Button zum Beenden der GUI und zum schließen aller offenen Figures erstellt
Code:
function beenden_Callback(hObject, eventdata, handles)
% hObject    handle to beenden (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%close(gcbf)
set(handles.output, 'HandleVisibility', 'off');
close all;
set(handles.output, 'HandleVisibility', 'on');
delete(gcbf)


Der funktioniert auch soweit. Falls jemand eine elegantere Lösung hat darf er/sie sie gerne teilen Wink

Nun wollte ich, bevor alles schließt eine DialogBox öffnen. Hier soll abgefragt werden ob man sicher schließen möchte.

Wenn JA dann alles schließen, also gui, alle offenen Figures und dialogbox, falls NEIN dann nur dialogbox schließen.

Wie kann ich den Buttons in der Dialogbox eine Funktion geben?

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.10.2020, 11:32     Titel:
  Antworten mit Zitat      
Hallo,

ich würde bei GUIDE questdlg verwenden. Das gibt eine Antwort zurück, die du mit einem switch-case nachverarbeiten kannst, siehe Beispiele in der Doku.

close all finde ich unschön. So kann ein Anwender Plots verlieren, die er vielleicht schon vor dem Öffnen der GUI erstellt hat. Man sollte meiner Meinung nach mitloggen, welche Fenster von der GUI geöffnet werden und nur die Fenster schließen, die von der GUI geöffnet wurden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
creme
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 23.10.2020, 11:50     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,
Man sollte meiner Meinung nach mitloggen, welche Fenster von der GUI geöffnet werden und nur die Fenster schließen, die von der GUI geöffnet wurden.


Wie "loggt man mit" was NUR von der GUI geöffnet wurde?

Mein code sieht etwas unelegant bisher so aus und funktioniert auch.
Code:
function beenden_Callback(hObject, eventdata, handles)
% hObject    handle to beenden (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%close(gcbf)
h=questdlg('Would you like to close the GUI?','Matlab','Yes','No','No');
switch h
  case 'Yes'
     %'OK' code here
     set(handles.output, 'HandleVisibility', 'off');
close all;
set(handles.output, 'HandleVisibility', 'on');
delete(gcbf)
  case 'NO'
     %abort code
  otherwise
end


Allerdings kommt nach dem Schließen der GUI diese Meldung.

Die Meldung erscheint allerdings nur wenn ich über die GUI noch keine Figures geöffnet habe Sad

gui meldung.JPG
 Beschreibung:

Download
 Dateiname:  gui meldung.JPG
 Dateigröße:  91.42 KB
 Heruntergeladen:  268 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
creme
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 23.10.2020, 12:07     Titel:
  Antworten mit Zitat      
Hallo,

im
Code:
kann man das letzte Problem umgehen indem man den Befehl
Code:
verwendet.

Wie man "mit loggt" habe ich noch nicht herausgefunden. Vielleicht statt
Code:
besser
Code:


Grüße

Zuletzt bearbeitet von creme am 23.10.2020, 12:15, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.10.2020, 12:13     Titel:
  Antworten mit Zitat      
Hallo,

wenn du etwas aus der GUI heraus öffnest:
Code:

und f in der GUI abspeichern.

Den entscheidenden Teil der Meldung sieht man nicht. Du musst das Command Window schon groß genug ziehen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
creme
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 23.10.2020, 12:48     Titel:
  Antworten mit Zitat      
Hallo Harald,

hmm ich verstehe was du meinst, aber ich habe mehrere figures und die Anzahl variiert je nach dem welchen Button ich betätige..

Gibt es keinen Befehl der prüft ob das figure oder mehrere aus der GUI heraus geöffnet wurde?

grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.10.2020, 13:00     Titel:
  Antworten mit Zitat      
Hallo,

wenn du mehrere Figures öffnest, dann kann ich mir z.B. sowas vorstellen:

Initialisieren:
Code:
handles.allFig = [];


Neues Aufmachen:
Code:
handles.allFig(end+1) = figure;


Wenn sie geschlossen werden sollen:
Code:
close(handles.allFig)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
creme
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 23.10.2020, 14:36     Titel:
  Antworten mit Zitat      
Hallo Harald,

wo initialisierst du das
Code:
handles.allFig = [];
 


ich habe das in meiner function gemacht. Geschlossen wird jetzt aber nur noch die GUI und nicht mehr das figure, welches ich in der GUI geöffnet habe. Confused

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

den Teil würde ich in GUIDE in die OpeningFcn packen.

Das alleine macht ja noch nichts. Der entscheidende Teil ist dann dieser:
Code:
handles.allFig(end+1) = figure;


Was du genau gemacht hast und warum es nicht so funktioniert, wie du dir das vorstellst, kann ich mit diesen Infos nicht sagen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
creme
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 23.10.2020, 15:44     Titel:
  Antworten mit Zitat      
Hallo Harald, das heißt der erste Teil in die openingfcn und die anderen beiden Teile in die callbackfcn?

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

Forum-Meister


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

so hoffentlich etwas klarer:

Initialisieren (in der Opening Function):
Code:
handles.allFig = [];


Neues Figure aufmachen (in Callbacks):
Code:
handles.allFig(end+1) = figure;


Wenn sie geschlossen werden sollen (im Callback zum Beenden oder auch in der CloseRequestFcn - die wird aufgerufen, wenn man das Kreuz rechts oben drückt):
Code:
close(handles.allFig)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
creme
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 23.10.2020, 16:12     Titel:
  Antworten mit Zitat      
Ja jetzt ist es etwas klarer.

Code:
handles.allFig(end+1) = figure;

Diese Funktion in jede callback in der ein oder mehrere figures geöffnet werden?

Danke für die Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.10.2020, 16:25     Titel:
  Antworten mit Zitat      
Ja.
An jeder Stelle, an der eine Figure geöffnet wird als Ersatz für einen figure(...) - Befehl.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.