mikrocontroller.net

Forum: PC-Programmierung Matlab: Status mehrerer Checkboxen abfragen


Autor: Kevin K. (nemon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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_gui...
und
Button Group

ich würde es so versuchen...

...
hp-freund

Autor: Remote One (remote1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
% --- Executes just before dspace is made visible.
function dspace_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to dspace (see VARARGIN)

% Choose default command line output for dspace
handles.output = hObject;
% globale gui Variable, welche dSpace Varable enthält
handles.file   = []; 
% globale gui Variable, welche handles für dynamisch erstellte checkboxes
% enthält
handles.checkboxhandles=[];

% handles Initialisieren
handles.objects=[];
movegui('center');

% Units auf pixels umstellen um besseres rechnen mit Position zu
% ermöglichen (bei dynamisch erstellten checkboxes ist automatisch pixels
% eingestellt)
set(handles.figure1,'Units','pixels');

%set(handles.figure1,'Toolbar','figure');    % toolbar einblenden
pth=findall(gcf,'Type','uipushtool');       % handle von pushtools erhalten
set(pth(:,1),'Visible','off');              % pushtools verbergen
tts=get(pth,'TooltipString');               % TooltipString auslesen
set(pth(find(ismember(tts,'Hide Plot Tools')),1),'Separator','off');
tth=findall(gcf,'Type','uitoggletool');     % handle von toggletools erhalten
tts=get(tth,'TooltipString');               % TooltipString auslesen
set(tth(find(ismember(tts,'Edit Plot')),1),'Separator','off');

% icon=load('CDataDualcursor.mat');
% tbh=findall(gcf,'Type','uitoolbar');
% uipushtool(tbh,'CData',icon.CDataDualcursor,'TooltipString','Dual Data Cursor','ClickedCallback',{@MIDualCursor_Callback,handles});

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes dspace wait for user response (see UIRESUME)
% 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!!!!

Autor: Kevin K. (nemon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.