Hi,
ich bastel gerade meine erste GUI in Matlab zusammen und stehe gerade
etwas auf dem Schlauch. Ich habe 10 Checkboxen. Immer, wenn eine sich
ändert, soll eine Funktion aufgerufen werden, die der Reihe nach die
Checkboxen nach ihrem Status abfragt und dementsprechend etwas macht.
Also soll im zugehörigen M-File etwas stehen wie
function checkbox1_Callback(hObject, eventdata, handles)
Auswerten();
...
function checkbox10_Callback(hObject, eventdata, handles)
Auswerten();
...
function Auswerten
if (get(handles.checkbox1,'Value')) == 1
do_something_1;
end
if (get(handles.checkbox2,'Value')) == 1
do_something_1;
end
Leider geht das nicht. Matlab spuckt meistens Fehler aus wie "Input
argument "handles" is undefined.". Ich schätze mal, dass die Funktion
Auswerten "nicht weiß, zu welcher Figure sie gehört". Es wär echt toll,
wenn mir jemand den entscheidenden Hinweis gibt. Ich muss mich zur Zeit
leider etwas in einem Crashkurs in Matlab GUIs einarbeiten, daher bin
ich da derzeit nicht wirklich fit drin.
Gast
#1861174
Hallo Kevin, hab zwar kein Matlab aber wie ich das sehe solltest Du für jede Checkbox ein handle erzeugen. Siehe: http://www.mathworks.com/help/techdoc/creating_guis/f15-998661.html#f15-1001600 und Button Group ich würde es so versuchen... ... hp-freund
Ohne jetzt deinen ganzen code zu kennen, würde ich sagen, du musst erst einmal die handles Struktur anlegen und vor allem jedes mal, wenn du da was änderst, das auch global bekannt machen mit: % Update handles structure guidata(hObject, handles); So mach ich das zumindest immer. Schau dir die Funktion guidata einfach mal genauer an. Ich mache das immer in der Funktion ..._OpeningFcn. Da wird das handle ja von Matlab angelegt. Je nach dem was ich machen will, erweitere ich mir natürlich noch die Struktur - hier mal ein Auszug aus einer meine guis:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
Wichtig ist hier, das du die struktur handles am Ende aktualisierst und damit global bekannt gibst Also mit guidata(hObject, handles); Dann kannst du in jeder Funktion darauf zugreifen und deine Struktur auch beliebig erweitern. Natürlich das Aktualisieren nicht vergessen. Lies dir mal hier http://www.mathworks.com/help/techdoc/ref/guidata.html den Abschnitt "Using guidata in a GUIDE GUI" genau durch!!!!
Danke euch beiden, nach etwas Einlesungszeit und paar Versuchen hat es nun erfolgreich geklappt. Da lag doch wohl gestern Abend ein zu großes Nichtverständnis des Objekthandlings unter Matlab vor ;)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.