Ich versuche, eine einfache "Durchsuchen" -Schaltfläche auf einer Matlab (R2016a) GUI zu erstellen. Mein Code ist so etwas wie:Die Verwendung von uigetdir als Callback für eine Drucktaste stürzt aufgrund von seltsamen, ungültigen Argumenten ab
hd = dialog;
hb = uicontrol('parent',hd,'style','pushbutton','string','browse',...
'callback',@uigetdir);
Die Callback-Funktion uigetdir
hat zwei optionale Argumente STARTPATH, TITLE
. Im Prinzip könnte ich diese auf meinem Rückruf übergibt, indem Sie sie mit der Funktion Griff auf einer Zellenanordnung, wie
hd = dialog;
hb = uicontrol('parent',hd,'style','pushbutton','string','browse',...
'callback',{@uigetdir,'myStartPath','myTitle');
Ob meine Schaltfläche Durchsuchen ruft uigetdir
mit oder ohne die optionalen Argumente verketten, wird es zum Absturz bringen. Verschiedene Fehler, aus dem gleichen Grund: uicontrol
beschließt, 2 uncalled-for, seltsame Variablen (die UI-Eigenschaften enthalten) als Argumente für die Callback-Funktion einzuschließen, und uigetdir
weiß nicht, was mit ihnen zu tun ist.
Bedeutet dies, dass ich uigetdir
(oder so ziemlich jede andere eingebaute Funktion) nicht als Callback-Funktion in einer GUI verwenden kann? Es muss eine Lösung neben dem Schreiben einer benutzerdefinierten Funktion geben, nein?
I [die Dokumentation für Rückrufe] schlagen vor, zu lesen (http://www.mathworks.com/help/matlab/creating_guis/write-callbacks-using-the-programmatic-workflow.html#f16-1001315) – excaza
Wirklich? Aus der Dokumentation: "Die Funktionsdefinition muss zwei Eingabeargumente definieren,' hObject' und 'callbackdata'. Handle Graphics® übergibt' hObject' und 'callbackdata' beim Aufruf der Funktion automatisch." – excaza
Auch aus der Dokumentation: "Hinweis: Wenn Sie eine vorhandene Funktion verwenden möchten, die die Argumente' hObject' und 'callbackdata' nicht unterstützt, können Sie sie als anonyme Funktion angeben. Zum Beispiel' uicontrol ('Style' , 'slider', 'Callback', @ (hObject, callbackdata) myfunktion (x); '" – excaza