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

Ändern eines stat. Textfeldes in Abhängigkeit von Popup-Au

 

teutopixx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 09.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2011, 11:50     Titel: Ändern eines stat. Textfeldes in Abhängigkeit von Popup-Au
  Antworten mit Zitat      
Als Neuling beim Erstellen eines GUI's mit Matlab habe ich ein kleines Problem.
Vielleicht auch nur eine Denkblockade - Sad

Das GUI wurde mit guide erstellt. Dort habe ich nun ein Popupmenü und ein statisches Textfeld, dass sich je nach Auswahl im

Popup-Menü ändern soll...im Prinzip nicht schwer.

Allerdings sollen in dem Popup-Menü die Namen von Analogmodulen eines cDAQ angezeigt werden.
Dieses habe ich auch realisiert, indem ich die OpeningFcn folgendermaßen verändert habe:

Code:

% Diese beiden Zeilen waren vorhanden
handles.output = hObject;
guidata(hObject, handles);

% Diese Zeilen habe ich hinzugefügt
d = daq.getDevices;

popup01 = d(1,1).Description;
popup02 = d(1,2).Description;
popup03 = d(1,3).Description;
popup04 = d(1,4).Description;

set(handles.popup, 'String', {popup01 popup02 popup03 popup04});


Hier taucht schon die erste Frage auf: Wenn ich d = daq.getDevices ganz normal in der Kommandozeile eingebe, legt er sie als

Variable im Workspace ab. Beim Starten des GUI jedoch nicht.

Um nun in einem statischen Textfeld den Test je nach Auswahl im Popup-Menü zu ändern, gehe ich wie folgt vor.
In der CallbackFcn des Popupmenü ergänze ich folgenden Code:

Code:

switch get(handles.popup,'Value')  
    case 1
        set(handles.test_staticText,'String', 'Auswahl 1');
    case 2
        set(handles.test_staticText,'String', 'Auswahl 2');
    case 3
        set(handles.test_staticText,'String', 'Auswahl 3');
    case 4
        set(handles.test_staticText,'String', 'Auswahl 4');
    otherwise
end
 


Soweit so gut...


Nur bekomme ich es irgendwie nicht hin, die oben schon verwendeten Namen der Analog-Module (also das, was z. B. in d(1,4).Description steht, in dem statischen Text anzeigen zu lassen.

Ich dachte, es würde z. B. ganz einfach gehen mit:

Code:

switch get(handles.popup,'Value')  
    case 1
        set(handles.test_staticText,'String', handles.popup);
 


Wenn ich dieses eingebe, erscheint im statischen Textfeld eine Zahl (11.0194) ... aber kein Text.
Warum?! Und wie kann ich Variablen dauerhaft ablegen, dass ich sie im Workspace sehe?
_________________

----
teutoPIXX
Private Nachricht senden Benutzer-Profile anzeigen


Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 09.03.2011, 12:57     Titel:
  Antworten mit Zitat      
Hi,
Zitat:

Hier taucht schon die erste Frage auf: Wenn ich d = daq.getDevices ganz normal in der Kommandozeile eingebe, legt er sie als Variable im Workspace ab. Beim Starten des GUI jedoch nicht.

Das passiert schon nur im WB der Funktion. Der Matlab Desktop WB hat damit nix zu tun. Jede Funktion hat ihren eigenen WB. Da gibs natürlich auch wieder Ausnahmen (z.B. Nested Funktions). Das solltest du dir vll mal in der Matlabhilfe anschauen... Du kannst dir dies beim Debuggen anschauen...
Den String des Popupmenus bekommst du wie folgt:
Code:

function popupmenu1_Callback(hObject, eventdata, handles)
str = get(hObject,'String');
GewString = str{get(hObject,'Value')};
set(handles.test_staticText,'String', GewString);
 

Zitat:

Und wie kann ich Variablen dauerhaft ablegen, dass ich sie im Workspace sehe?

Das würde ich nicht machen, da du alles innerhalb deiner Callbacks regeln kannst. Zudem wird es dann unübersichtlich... Du kannst natürlich mittels setappdata bzw. guidata deine Daten Zwischenspeichern (wenn du z.B. meherere Guis offen hast, die miteinander kommunizieren sollen)

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
ste99947

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2011, 13:05     Titel:
  Antworten mit Zitat      
Hallo,
1. Die Matlab-Hilfe zu GUIs und GUIDE lesen!
2.
Zitat:
Hier taucht schon die erste Frage auf: Wenn ich d = daq.getDevices ganz normal in der Kommandozeile eingebe, legt er sie als Variable im Workspace ab. Beim Starten des GUI jedoch nicht.

Die Variable wird im lokalen Workspace der aufrufenden Funktion (hier die OpeningFcn) erstellt. Wenn du in auf die Zeile einen Breakpoint setzt wird es sichtbar. Um ausserhalb der aufrufenden Funktion auf die Variable zugreifen zu können musst du sie z.B. über die handles-Struktur exportieren. z.B.:

Code:

handles=guidata(hObject); % Handles importieren
d = daq.getDevices;
% der Rest deiner Funktion

handles.d=d; %handles ergänzen
guidata(hObject, handles); %modifizierte handles exportieren
 


3.
Code:

set(handles.test_staticText,'String', handles.popup);
 

handles.popup ist das handle auf das Popup Cool
Du möchtest den dazugehörigen string haben. Also:
Code:

einString=get(handles.popup,'String');
set(handles.test_staticText,'String', einString);
 


viel Spass
Stephan
 
teutopixx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 09.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2011, 15:03     Titel:
  Antworten mit Zitat      
Herzlichen Dank!
Das funktioniert soweit ganz gut!

Noch eine anschliessende Frage:
Gibt es eine einfache Möglichkeit, in einem Popup-Menü die Zahlen einer Variable aufsteigend anzeigen zu lassen?
Z. B. habe ich zwei Popup-Menüs, und 2 Variablen. In der einen Variable steht als "1x1 double" der Wert 6 und in der anderen der Wert 4. Diese Werte können sich durchaus mal ändern. Also soll auch das Popup-Menü dementsprechend die Werte anzeigen.
_________________

----
teutoPIXX
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 10.03.2011, 08:46     Titel:
  Antworten mit Zitat      
Hey,
Zitat:

Gibt es eine einfache Möglichkeit

was heist einfach? Ich denke du könntest mittels sprintf die Zahlen und Strings in ein cellarray mit strings schreiben, welches du dann den popupmenus übergibst...
Code:

str = cellfun(@(x,y)sprintf('%.0f %s',x,y),num2cell([1 2]),{'Hallo' 'World'},'UniformOutput',false)
 


MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
ste99947

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2011, 10:17     Titel:
  Antworten mit Zitat      
Hi,
einfach nur den Inhalt eines popups ändern geht auch wieder mit set.
Code:

figure;
h=uicontrol('style','popup','string',[42 21 64]);
myVar=[32 16 8];
pause;
set(h,'string',myVar);
 

Automatisch eine Aktion auslösen, wenn sich eine Variable verändert geht glaube ich nicht. Da musst du MATLAB schon mitteilen das etwas passieren soll.
Grüße
Stephan
 
teutopixx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 09.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2011, 10:35     Titel:
  Antworten mit Zitat      
Also so ganz verstanden hab' ich die Lösungsansätze glaub ich noch nicht.
Ich habe in einer Variablen "meineVariable" die einfache Zahl "6" stehen.
Und nun soll mir das Popup-Menü die Zahlen von 0-5 zur Auswahl anzeigen.
Sollte irgendwann in der Variablen ein anderer Wert stehen, so soll das Popup-Menü entsprechend andere Zahlen anzeigen. Z. B. steht beim nächsten Start des GUI in der Variabe "meineVariable" die Zahl 8, dann soll das Popup-Menü die Zahlen 0-7 anzeigen.
Bei der Lösung des Problems stehe ich irgendwie auf dem Schlauch.
_________________

----
teutoPIXX
Private Nachricht senden Benutzer-Profile anzeigen
 
teutopixx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 09.03.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2011, 10:55     Titel:
  Antworten mit Zitat      
Mit dem Lösungsansatz von ste99947 könnte ich es doch folgendermaßen machen:

Code:

figure;
h=uicontrol('style','popup','string',[42 21 64]);
meineVariable = 6
hilfsvariable = [0:(meineVariable-1)]
% Das Ergebnis von hilfsvariable wäre dann [0 1 2 3 4 5]
pause;
set(h,'string',hilfsvariable);
 

_________________

----
teutoPIXX
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 - 2025 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.