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

m_file in einer Gui Callbackfunction aufrufen

 

Thomas123
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2016, 23:14     Titel: m_file in einer Gui Callbackfunction aufrufen
  Antworten mit Zitat      
Ich möchte gerne mit einem pushbutton über die Callback function in matlab ein anderes m.file aufrufen und ausführen.

Code:

% --- Executes on button press in SudokuEinlesen.
function SudokuEinlesen_Callback(hObject, eventdata, handles)
% hObject    handle to SudokuEinlesen (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
handles=guidata(hObject);
set(handles.Sofortloesung, 'Enable','On');
set(handles.Lehrer, 'Enable','On');
set(handles.ZahlUmZahlMitTaste, 'Enable','On');
set(handles.ZahlUmZahlMitTimer, 'Enable','On');
type('Sudoku_Einlesen');
guidata(hObject, handles);
 




"type Sudoku_Einlesen" dabei funktioniert zwar das im Command window alles aus dem m.file angezeigt wird aber leider nur in schwarz und es passiert somit nichts.

"run Sudoku_Einlesen" habe ich auch schon probiert dabei passiert aber gar nichts.

Vielen Dank für eure Hilfe


Gruss

Thomas
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

ist Soduko_einlesen ein Skript oder eine Funktion?
Welche Ergebnisse erwartest du denn?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2016, 18:44     Titel:
  Antworten mit Zitat      
Hallo Harald

ein Script


mit freundlichen Grüssen

Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wenn 2 Rückfragen gestellt werden, bitte auch 2 Antworten geben.

Du kannst in das Skript z.B. einen Haltepunkt setzen um zu sehen, ob es aufgerufen wird.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2016, 20:55     Titel:
  Antworten mit Zitat      
Hallo Harald

entschuldige bitte


Als Ergebnis erwarte ich das mein m.file in dem Fall Sudoku_Einlesen über die Callback Fuktion ausgeführt wird, wenn ich im gui den Pushbutton drücke.

Vielen Dank


mit freundlichen Grüssen

Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.12.2016, 22:23     Titel:
  Antworten mit Zitat      
Hallo,

und genau das sollte mit run('script') passieren.
Wie äußert sich denn, dass das Skript ausgeführt wurde? Gibt es Plots, wird etwas ins Command Window geschrieben, oder werden "nur" Variablen erstellt / geändert?

Hast du das mit dem Haltepunkt versucht?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2016, 20:36     Titel:
  Antworten mit Zitat      
Hey Harald

Code:
% --- Executes on button press in SudokuEinlesen.
function SudokuEinlesen_Callback(hObject, eventdata, handles)
% hObject    handle to SudokuEinlesen (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
handles=guidata(hObject);
set(handles.Sofortloesung, 'Enable','On');
set(handles.Lehrer, 'Enable','On');
set(handles.ZahlUmZahlMitTaste, 'Enable','On');
set(handles.ZahlUmZahlMitTimer, 'Enable','On');
run('Sudoku_Einlesen');

guidata(hObject, handles);



eigentlich sollte nach dem drücken des Pushbutton SudokuEinlesen, dass mfile Sudoku_Einlesen ausgeführt werden.

Sudoku_Einlesen sieht so aus
Code:
% ------------------------------------------------------------------------
% Auslesen des Excel Files in eine Matlab Variable
% ------------------------------------------------------------------------

SudokuMatrix = xlsread('Sudoku_Excel_Sheet.xlsx','A1:I9');

SudokuMatrix(isnan(SudokuMatrix))= [0];


% ------------------------------------------------------------------------


Das mfile müsste mir dann eine Sudoku Matrix ins Workspace schreiben.

Es passiert aber leider gar nichts, nicht mal eine Fehlermeldung.

Was genau ist ein Haltepunkt? Habe das gegoogelt will aber mein Programm ja nicht stoppen oder pausieren.


Vielen Dank

mit freundlichen Grüssen

Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.12.2016, 22:56     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Das mfile müsste mir dann eine Sudoku Matrix ins Workspace schreiben.

Die Frage ist ja dann, in welchen Workspace. Vermutlich in den des Callbacks, und den siehst du nach dessen Ausführung nicht mehr.

Zitat:
Habe das gegoogelt will aber mein Programm ja nicht stoppen oder pausieren.

Das solltest du aber wollen, wenn du wissen willst, ob bestimmte Programmteile ausgeführt werden und was in welchem Workspace passiert.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2016, 00:10     Titel:
  Antworten mit Zitat      
Hallo Harald


In dem Fall möchte ich ein mfile ausführen das mir eine globale Variable erstellt.
Wie bekomme ich also innerhalb der Callback funktion das mfile dazu mir die Variable in den global Workspace zu schreiben und nicht in den Callback Workspace?

wäre super wenn du mir ein Beispiel hast.^^

Vielen Dank


Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.12.2016, 09:03     Titel:
  Antworten mit Zitat      
Hallo,

globale Variablen finde ich überzogen.
Hier gibt es verschiedene Wege und zugehörige Beispiele:
https://de.mathworks.com/help/matla.....data-among-callbacks.html
Mein bevorzugter Weg wäre "Application Data".

Grüße,
Harald
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: 08.12.2016, 16:28     Titel:
  Antworten mit Zitat      
Hallo Thomas123,

Harald hat recht: Mit globalen Variablen bohrt man sich immer ins Knie. Es ist klarer, schneller, übersichtlicher, besser debugbar und lesbar, Variablen lokal in der Figure zu speichern. Siehe 'ApplicationData', 'guidata', 'UserData'.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2016, 18:12     Titel:
  Antworten mit Zitat      
Hey Leute

Nochmals vielen Dank für die schnellen Antworten.

Damit wir nicht aneinander vorbeireden poste ich den code mal unterhalb wie ich ihn im Moment habe.


Das ist die Callback function im GUI File welche mir mit run(Sudoku_Einlesen)......
Code:
% --- Executes on button press in SudokuEinlesen.
function SudokuEinlesen_Callback(hObject, eventdata, handles)
% hObject    handle to SudokuEinlesen (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
handles=guidata(hObject);
set(handles.Sofortloesung, 'Enable','On');
set(handles.Lehrer, 'Enable','On');
set(handles.ZahlUmZahlMitTaste, 'Enable','On');
set(handles.ZahlUmZahlMitTimer, 'Enable','On');

run ('Sudoku_Einlesen')


guidata(hObject, handles);


Die Beschreibung von Matlab:
Description
example
run(scriptname) runs the MATLAB® script specified by scriptname.

dieses File ausführen sollte:
Code:
% ------------------------------------------------------------------------
% Auslesen des Excel Files in eine Matlab Variable
% ------------------------------------------------------------------------

global SudokuMatrix
SudokuMatrix = xlsread('Sudoku_Excel_Sheet.xlsx','A1:I9');

SudokuMatrix(isnan(SudokuMatrix))= 0;


% ------------------------------------------------------------------------


Im Moment ist es als Global Variable definiert ich habe es aber auch schon ohne probiert und das gleiche Ergebnis erhalten.

Diese Zeilen funktionieren alle Einwandfrei auch wenn ich run(Sudoku_Einlesen) oberhalb im Code schreiben werden diese ausgeführt.

set(handles.Sofortloesung, 'Enable','On');
set(handles.Lehrer, 'Enable','On');
set(handles.ZahlUmZahlMitTaste, 'Enable','On');
set(handles.ZahlUmZahlMitTimer, 'Enable','On');

Es gibt leider keine Fehlermeldungen es scheint als ob der Befehl run (Sudoku_Einlesen) überprüft und dann übersprungen wird.

Vielen Dank

mfg

Thomas
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: 16.12.2016, 22:53     Titel:
  Antworten mit Zitat      
Hallo Thomas123,

Zitat:
es scheint als ob der Befehl run (Sudoku_Einlesen) überprüft und dann übersprungen wird.

Es gibt in Matlab kein magisches "überprüfen und überspringen". Es ist vollkommen sicher, dass Matlab diesen Befehl ausführt. Aber offensichtlich nicht so, wie Du es erwartest.

Zitat:
Was genau ist ein Haltepunkt? Habe das gegoogelt will aber mein Programm ja nicht stoppen oder pausieren.

Das solltest Du aber. Suche nach "breakpoint" in Matlab's Dokumentation.
Um herauszufinden, was da passiert, ist der Debugger das Werkzeug der Wahl: Setze einen Breakpoint in eine Zeile des Callbacks und gehe dann Zeile für Zeile durch den Code. Im Workspace Browser kannst Du dabei beobachten, welche Variable welche Werte annimmt.

Du schreibst, dass Du "das gleiche Ergebnis erhalten" hast - und welches ist das genau? Was möchtest Du stattdessen bekommen?

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

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.12.2016, 23:05     Titel:
  Antworten mit Zitat      
Hallo,

hast du die von mir vorgeschlagenen Lösungsansätze (08.12.2016, 08:03) versucht?
Wenn ja, sind dabei Probleme aufgetreten, und welche konkret?
Wenn nein, was hält dich davon ab?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2016, 22:31     Titel:
  Antworten mit Zitat      
Hey Leute

Es geht mir in erster Linie darum das ich über das drücken des Pushbutton ein m.File ausführen kann.
In meinem Fall Sudoku_Einlesen, ist es so das das m.File mir eine Excel Tabelle ausliest und wie im Moment programmiert als globale Variable speichert.

Wenn ich das File separat ausführe funktioniert alles wunderbar, wenn ich es aber mit dem Pushbutton über den callback ausführen will dann passiert gar nix.

Der Matlab guide schreibt dazu:

Description
example
run(scriptname) runs the MATLAB® script specified by scriptname.

So wie ich das verstehe sollte matlab an der stelle stoppen, dann das file ausführen und dann weiterfahren mit dem Callback befehl oder verstehe ich das falsch?

Ich bin mir nicht sicher ob ich das mit Application Data richtig verstanden habe, könntest du es mir mit deinen Worten erklären und vielleicht ein Beispiel machen?


Vielen Dank

mfg

Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  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 - 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.