WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Werteanpassung bei Objekten erstellt im Appdesigner

 

Studantus
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 22.11.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2018, 15:59     Titel: Werteanpassung bei Objekten erstellt im Appdesigner
  Antworten mit Zitat      
Hallo liebe Matlab-Gurus,
ich beschäftige mich zur Zeit mit dem Appdesigner in Matlab. Ich habe ein paar Checkboxen erzeugt und schreibe - bei Wertänderung - den neuen Zustand in ein Zustands_Array, welches im Workspace liegt. Soweit so gut: Lesen und Schreiben des Arrays funktioniert.

Nun möchte ich das Zustands_Array - welches ja die Zustände der Checkboxen beinhaltet - auch von außerhalb beeinflussen und das ganze eben dann visuell mit den Checkboxen darstellen. (alles in einer zyklisch aufgerufenen Funktion)

Die Zuweisung einzeln funktioniert für jede Checkbox:

app.CheckBox_1.Value = Zustands_Array(1);

Da ich noch mehr Checkboxen einbauen muss erscheint es mir praktikabler mein Vorhaben mit einer for Schleife umzusetzen. Dazu möchte ich zuvor die jeweiligen Checkboxes auslesen und in ein Checkbox_Array schreiben und dann in der for Schleife jedem Checkbox_Array - Element das Element in dem Zustands_Array zuweisen. beide Array haben die selbe Dimmension.

Dazu der folgende Code:

Code:
% Laden der Struktur auswahl aus dem Workspace
Zustands_Array = evalin('base','Zustands_Array');

% Auslesen der Objekte vom Typ "uicheckbox" (ist ja ne App!)
Checkbox_Array = app.findobj('Type', 'uicheckbox');

% Zuweisung Checkbox aktuelle Werte
for i = 1:20
    app.Checkbox_Array(i).Value = Zustands_Array(i);
end


Weiß jemand, wie ich aus dem handle Array (Checkbox_Array) die Zuweisung der neuen Werte "richtig" verfasse?

Vielen Dank im Voraus Smile
_________________

LG Studantus
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.11.2018, 17:07     Titel: Re: Werteanpassung bei Objekten erstellt im Appdesigner
  Antworten mit Zitat      
Hallo Studantus,

Ich habe den AppDesigner noch nicht verwendet. Ich vermute, folgendes würde funktionieren:

Code:
Zustands_Array = evalin('base','Zustands_Array');
for i = 1:20
    app.(sprintf('Checkbox_%d', i)).Value = Zustands_Array(i);  % [EDITED, Danke Harald!]
end


Gruß, Jan

Zuletzt bearbeitet von Jan S am 23.11.2018, 15:32, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.11.2018, 18:56     Titel:
  Antworten mit Zitat      
Hallo,

Bei Jans Vorschlag fehlen ' '
Code:
app.(sprintf('Checkbox_%d', i)).Value = Zustands_Array(i);


Zusätzlich noch: eval(in) ist immer unschön. Bei App Designer kann man schön eigene Eigenschaften ("properties") definieren, um die eigenen Daten innerhalb der App abzuspeichern.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Studantus
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 22.11.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.11.2018, 16:55     Titel:
  Antworten mit Zitat      
Hallo Smile
vielen Dank für die schnellen Antworten. Jetzt funktioniert es - sprintf war die Lösung!

mit dem folgenden Code wurden die Werte der Checkboxen verändert:

% Laden der Struktur auswahl aus dem Workspace
Zustands_Array = evalin('base','Zustands_Array');

% Laden der Checkbox-Array-Namen (leider nur von Hand bisher möglich)
Checkbox_Array = (["CheckBox_1" ...
"CheckBox_2" ...
"CheckBox_3"]);

% Zuweisung Checkbox aktuelle Werte
for i = 1:3
app.(sprintf('%s', Checkbox_Array(i))).Value = Zustands_Array(i);
end

Leider hat es bei mir nicht geklappt mit:

Checkbox_Array = app.findobj('Type', 'uicheckbox');

die Checkboxen als Array von Objekten filtern zu lassen. Beim Erstellen der grafischen Oberfläche mit Appdesigner wird von der Programmierumgebung automatisch ein Code angelegt (eben das Erstellen der Objekte). Dieser lässt sich nicht verändern. Die Properties Tag und Type werden auch von der Programmierumgebung vergeben (oder eben leer gelassen). Deshalb bekommt man mit dem findobj(...) eine Struktur mit allen erstellten Objekten zurück. Ein Anpassen der Tag Einträge ist in der App nicht möglich (zu mindest über den Editor). Ein erweitertes Editormenü zur Bearbeitung der Objekteigenschaften lässt sich nur über Matlab (Workspace) öffnen und ändern. Nach anderen Eigenschaften kann ich nicht filtern, da diese bei den Objekten identisch sind.

Hab ich etwas übersehen, gibt es doch die Möglichkeit die handles auszulesen (so ähnlich wie bei GUIDE) und die Eigenschaften von einer Auswahl von Objekten ohne großen Programmieraufwand zu ändern?

Vielen Dank im voraus.

@Harald ja das stimmt, mit eval(in) ist es etwas unschön, allerdings benötige ich für mein Projekt den Workspace ("base") zum Austausch von den Zuständen ^^
_________________

LG Studantus
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.11.2018, 17:27     Titel:
  Antworten mit Zitat      
Hallo,

unser Vorschlag sollte an sich gleichwertig mit dem sein, was du geschrieben hast, nur dass der händische Teil wegfällt.

Ansonsten ist mir einiges nicht klar:
Zitat:
(zu mindest über den Editor)

Meinst du damit jetzt den Code View von App Designer oder den "normalen" Editor?

Zitat:
Ein erweitertes Editormenü...

Welches "Editormenü" meinst du?

Zitat:
allerdings benötige ich für mein Projekt den Workspace ("base") zum Austausch von den Zuständen ^^

Das sollte sich eleganter lösen lassen.

Bei dem bisherigen Code kannst du Zustands_Array als Eingabeargument der App übergeben und in der StartupFcn als Property abspeichern und von dort aus auch wieder abfragen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.