Verfasst am: 26.11.2016, 23:14
Titel: m_file in einer Gui Callbackfunction aufrufen
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.
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?
% --- 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');
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 % ------------------------------------------------------------------------
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?
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'.
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');
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');
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?
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?
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?
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.