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.
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 | % --- Executes just before dspace is made visible. |
2 | function dspace_OpeningFcn(hObject, eventdata, handles, varargin) |
3 | % This function has no output args, see OutputFcn. |
4 | % hObject handle to figure |
5 | % eventdata reserved - to be defined in a future version of MATLAB |
6 | % handles structure with handles and user data (see GUIDATA) |
7 | % varargin command line arguments to dspace (see VARARGIN) |
8 | |
9 | % Choose default command line output for dspace |
10 | handles.output = hObject; |
11 | % globale gui Variable, welche dSpace Varable enthält |
12 | handles.file = []; |
13 | % globale gui Variable, welche handles für dynamisch erstellte checkboxes |
14 | % enthält |
15 | handles.checkboxhandles=[]; |
16 | |
17 | % handles Initialisieren |
18 | handles.objects=[]; |
19 | movegui('center'); |
20 | |
21 | % Units auf pixels umstellen um besseres rechnen mit Position zu |
22 | % ermöglichen (bei dynamisch erstellten checkboxes ist automatisch pixels |
23 | % eingestellt) |
24 | set(handles.figure1,'Units','pixels'); |
25 | |
26 | %set(handles.figure1,'Toolbar','figure'); % toolbar einblenden |
27 | pth=findall(gcf,'Type','uipushtool'); % handle von pushtools erhalten |
28 | set(pth(:,1),'Visible','off'); % pushtools verbergen |
29 | tts=get(pth,'TooltipString'); % TooltipString auslesen |
30 | set(pth(find(ismember(tts,'Hide Plot Tools')),1),'Separator','off'); |
31 | tth=findall(gcf,'Type','uitoggletool'); % handle von toggletools erhalten |
32 | tts=get(tth,'TooltipString'); % TooltipString auslesen |
33 | set(tth(find(ismember(tts,'Edit Plot')),1),'Separator','off'); |
34 | |
35 | % icon=load('CDataDualcursor.mat'); |
36 | % tbh=findall(gcf,'Type','uitoolbar'); |
37 | % uipushtool(tbh,'CData',icon.CDataDualcursor,'TooltipString','Dual Data Cursor','ClickedCallback',{@MIDualCursor_Callback,handles}); |
38 | |
39 | % Update handles structure |
40 | guidata(hObject, handles); |
41 | |
42 | % UIWAIT makes dspace wait for user response (see UIRESUME) |
43 | % uiwait(handles.figure1); |
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 ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.