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

variables popupmenu

 

Speedytoni
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2017, 13:36     Titel: variables popupmenu
  Antworten mit Zitat      
Hallo ihr Matlab-Experten!

Ich schreibe gerade meine erste GUI (mit GUIDE, auch wenn ich mir mittlerweile mehr und mehr der Nachteile bewusst werde).

Dabei bin ich auf ein Problem gestoßen, welches mit mittlerweise schon eine Weile beschäftigt.

Ich habe eine globale Variable "v_station" im Workspace mit variierender Größe. Dieser gibt die x-Koordinate eines Koordinatensystems an.
Nun möchte ich den Nutzer meiner GUI einen bestimmten Wertebereich von v_station auswählen lassen. Dazu möchte ich zwei Dropdownbuttons erstellen, deren Inhalt vom Inhalt der Variable "v_station" abhängt und jeweils den ausgewählten Wert als Variable speichern. v_station ist ein n x 1 double. Diesen konvertiere ich per num2str in text.
Wie kann ich dies nun als dynamische Auswahlmöglichkeiten einstellen?

Alle Tutorien/Videos zum Thema arbeiten nur mit statischen Auswahlmöglichkeiten Confused

bisheriger Code:
Code:

% --- Executes on selection change in popup_startstation.
function popup_startstation_Callback(hObject, eventdata, handles)
% hObject    handle to popup_startstation (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
contents = cellstr(get(hObject,'String'));
start=get(contents,'String');
transfer=str2num(start);
assignin('base','startstation',transfer);
% Hints: contents = cellstr(get(hObject,'String')) returns popup_startstation contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popup_startstation


% --- Executes during object creation, after setting all properties.
function popup_startstation_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popup_startstation (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called
global v_station;
 set(handles.popup_startstation, 'String', num2str( v_station ));
% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
 


führt zu folgender Fehlermeldung:

>> Edit_strecke
Struct contents reference from a non-struct array object.

Error in Edit_strecke>popup_startstation_CreateFcn (line 128)
set(handles.popup_startstation, 'String', num2str( v_station ))

Error in gui_mainfcn (line 95)
feval(varargin{:});

Error in Edit_strecke (line 42)
gui_mainfcn(gui_State, varargin{:});

Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)Edit_strecke('popup_startstation_CreateFcn',hObject,eventdata,guidata(hObject))

Ich bin für jeden Hinweis dankbar!

Liebe Grüße

Toni
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: 08.07.2017, 11:03     Titel: Re: variables popupmenu
  Antworten mit Zitat      
Hallo Speedytoni,

Zitat:
Ich habe eine globale Variable "v_station" im Workspace mit variierender Größe.

Globale Variablen sind immer ein Schuss ins Knie. Sowie Proghramme umfangreicher werden oder man mehrere Toolboxen gemeinsam verwendet, führen globale Variablen dazu, dass der Code kaum debugt werden kann. Im Falle von Fehlern ist es extrem schwierig herauszufinden, welcher Programmteil für die letzte Änderung des Wertes verantowrtlich ist. Und sowie ein Global mehrfach deklariert wird, z.B. wenn man mehrere Instanzen eines GUIs öffnet, ist das Chaos perfekt.
Nebenbei: "globale" Variablen liegen eben gerade nicht in einem bestimmten WorkSpace, das ist ja die Definition von "global".

Es gibt immer eine bessere Möglichkeit, alle Daten nur lokal zu speichern und per Inputs/Outputs mit anderen Funktionen auszutauschen. Bei einem GUI kann man die Werte per setappdata / getappdata oder guidata speichern, oder alternativ in den UserData des Objektes, zu dem die Daten gehören.

Als professioneller Programmierer ist dieser erste Satz also bereits ein Alarmsignal, dass das Design Deines Codes ein grundätzliches Problem hat.
Ich sehe im Code ein assignin , das Variablen ferngesteuert im Base WorkSpace. Das zieht Bugs an.

Zitat:
Wie kann ich dies nun als dynamische Auswahlmöglichkeiten einstellen?

Ich habe die eigentliche Frage nicht verstanden.

Zitat:
Alle Tutorien/Videos zum Thema arbeiten nur mit statischen Auswahlmöglichkeiten
:?
Das glaube ich nicht.

Ich arbeite nicht mit GUIDE, aber der Debugger sollte Dir helfen:
Code:

im CommandWindow eingeben, dann GUI öffnen. Nun stoppt Matlab sowie der Fehler auftritt. Jetzt kannst Du die entsprechende Variable untersuchen:
Zitat:
Code:
function popup_startstation_CreateFcn(hObject, eventdata, handles)
set(handles.popup_startstation, 'String', num2str( v_station ));

Ich vermute, innerhalb der CreateFcn des GUIs ist "handles" nocht nicht existent, oder? Die globale Variable existiert vielleicht auch noch nicht.
Vermutlich sollte dieser Code erst in der OpeningFcn ausgeführt werden, wenn das GUI also bereits erstellt wurde.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Speedytoni
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2017, 09:12     Titel:
  Antworten mit Zitat      
Hallo Jan,
vielen Dank für die schnelle und so ausführliche Antwort. Du hast mir viel Input gegeben, der mich eine Weile beschäftigen wird, danke dafür!

Zitat:
Zitat:

Wie kann ich dies nun als dynamische Auswahlmöglichkeiten einstellen?


Ich habe die eigentliche Frage nicht verstanden.


Ich möchte diese Frage nocheinmal konkretisieren.

Ziel ist, dass meine GUI ein Dropdownmenü enthält, welches vorher vom Nutzer eingelesene Daten enthält.
Diese Daten werden werden per xlsread in der Variablen v_station (beispielhaft lassen wir das mal ein 1000x1 double sein) gespeichert.

Ich bin dazu einfach bisher nicht fündig geworden, vermutlich aufgrund falscher Suchbegriffe.

Liebe Grüße

Toni
Wie lassen sich nun die Variableninhalte in die Auswahl des Dropdownmenüs einfügen?
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: 12.07.2017, 17:57     Titel:
  Antworten mit Zitat      
Hallo Speedytoni,

Zitat:
Wie lassen sich nun die Variableninhalte in die Auswahl des Dropdownmenüs einfügen?

Das kommt darauf an, was Du mit "Variableninhalten" und "die Auswahl des Dropdownmenüs" meinst. Wo soll was eingefügt werden?

Du kannst die Eigenschaft 'String' des Dropdown-Menüs nach Belieben ändern.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Speedytoni
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 04.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2017, 13:21     Titel:
  Antworten mit Zitat      
Vielen Dank, das Bearbeiten der String-Property war es dann letztlich. Offenbar war die Frage zu umständlich gestellt.
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: 18.07.2017, 17:32     Titel:
  Antworten mit Zitat      
Hallo Speedytoni,

Fragen sind sehr oft zu umständlich gestellt, weil der Fragende ja noch gar nicht weiß, welche Details für die Lösung relevant sind. Die Lösung ist oft trivial, wenn man erstmal die richtige Frage gefunden hat. Das liegt in der Natur der Dinge - oder vielleicht am menschlichen Gehirn. :-)

Gruß, Jan
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.