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

Zugriff auf Properties von GUI-Objekten

 

AlBa
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 25.11.20
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 25.11.2020, 15:13     Titel: Zugriff auf Properties von GUI-Objekten
  Antworten mit Zitat      
Hallo,

ich verstehe nicht, wie ich innerhalb von Callbacks Zugriff auf andere GUI-Objekte bekommen kann. Im konkreten Fall möchte ich Zugriff auf den string von h.length. Diesen Wert möchte ich manipulieren können und zurückschreiben.


Code:
close all
clear h

figure ("toolbar", "none",
'Name','GUI Design with Octave Example');



function myfun ()
   
  printf("%s", get (gcbf(), "name"));

  printf("%s", get (gcbo(), "string"));
 
 
end;




                     

h.geopanel = uipanel ('position', [0.01 0.5 0.98 0.45]);
                   
h.length_label = uicontrol ('style', 'text',
                                'units', 'normalized',
                                'string', 'Länge:',
                                'horizontalalignment', 'left',
                                'position', [0.03 0.86 0.2 0.08]);
                               
h.length = uicontrol ('style', 'edit',
                               'units', 'normalized',
                               'string', '100',
                               %'callback', @update_plot,
                               'position', [0.12 0.86 0.15 0.08]);
                               
h.length_great_reduce = uicontrol ('style', 'pushbutton',
                               'units', 'normalized',
                               'string', '--',
                               %'callback', @update_plot,
                               'position', [0.3 0.86 0.05 0.08]);                              

h.length_reduce = uicontrol ('style', 'pushbutton',
                               'units', 'normalized',
                               'string', '-',
                               %'callback', @update_plot,
                               'position', [0.35 0.86 0.05 0.08]);                                
                               
                               
h.length_increase = uicontrol ('style', 'pushbutton',
                               'units', 'normalized',
                               'string', '+',
                               'callback', @myfun,
                               'position', [0.4 0.86 0.05 0.08]);  
 


Danke und beste Grüße,
Alex
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: 25.11.2020, 20:42     Titel:
  Antworten mit Zitat      
Hallo,

das sollte über h.length.String gehen. Dazu musst du natürlich h übergeben. Ob das s klein oder groß sein muss, bin ich nicht 100%ig sicher.

Gibt es einen triftigen Grund, die GUI mit Befehlen zu erstellen? Es gibt deutlich einfachere Möglichkeiten, z.B. App Designer.

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
 
AlBa
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 25.11.20
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 26.11.2020, 11:17     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank für die schnelle Antwort.
Zitat:
Gibt es einen triftigen Grund, die GUI mit Befehlen zu erstellen? Es gibt deutlich einfachere Möglichkeiten, z.B. App Designer.

Ich benutze Octave. Der App Designer ist doch nur in Matlab vorhanden, oder?

Zitat:
das sollte über h.length.String gehen.


Das werde ich mal probieren. Gestern habe ich noch die Möglichkeit gefunden das Objekt mit einem Tag zu versehen und mir dann den Handle über den Tag rauszusuchen.

Erstellen des Objektes mit Tag:
Code:
q.length = uicontrol ('style', 'edit',
                               'Tag', 'GUI_length',
                               'units', 'normalized',
                               'string', '100',
                               %'callback', @update_plot,
                               'position', [0.12 0.86 0.15 0.08]);


Ansprechen über den Tag:
Code:
 gui1_H = findobj('Tag', 'GUI_length');
  t=str2num(get (gui1_H, "string"));
  t++;
  set (gui1_H,"string",num2str(t));


Das ist natürlich umständlicher als Dein Vorschlag. Gibt es darüber hinaus etwas was gegen die Lösung mit dem Tag spricht?

Dank und beste Grüße
Alex
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: 26.11.2020, 12:36     Titel:
  Antworten mit Zitat      
Hallo,

ich kenne mich mit Octave nicht aus, würde aber vermuten, dass es App Designer dort nicht gibt. Für mich wäre das ein sehr guter Grund, zu MATLAB zu wechseln.

Gegen den Ansatz mit dem Tag sprechen höchstens Performance-Fragen und die Übersichtlichkeit des Codes.

Ob die Syntax h.length.String in Octave unterstützt wird, weiß ich nicht. Es kann sein, dass man dort noch mit get arbeiten muss.

Fragen zu Octave bitte generell ins Unterforum Octave.

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
 
AlBa
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 25.11.20
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 27.11.2020, 15:19     Titel:
  Antworten mit Zitat      
Hallo,

gibt es eine Möglichkeit alle GUI-Objekte in H anzusprechen, um visible on/off zu schalten?

Außerdem würdest Du mir noch sehr helfen, wenn Du mir die korrekte Übergabe für Deinen Vorschlag den Label anzusprechen mit
h.length.String
einmal darstellen könntest.

Vielen Dank und beste Grüße
Alex
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: 27.11.2020, 15:59     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
gibt es eine Möglichkeit alle GUI-Objekte in H anzusprechen, um visible on/off zu schalten?

Meines Wissens nicht. Im Zweifelsfall fieldnames und eine for-Schleife.

Zitat:
Außerdem würdest Du mir noch sehr helfen, wenn Du mir die korrekte Übergabe für Deinen Vorschlag den Label anzusprechen mit
h.length.String
einmal darstellen könntest.

Wenn h übergeben wurde, geht das in MATLAB direkt so. Zur Übergabe von h braucht man wohl anonyme Function Handles. Was die Schnittstelle der Callbacks in Octave ist, weiß ich nicht, aber wahrscheinlich sowas:
Code:
'callback', @(a,b) update_plot(a,b,h)

update_plot müsste dann drei Inputs entgegennehmen, und der dritte ist h.

Ich habe zugegebenermaßen auch in MATLAB ewig keine GUI mehr so aufgebaut, weil es eben mit App Designer so viel einfacher ist.

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.