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

"dynamisches" Popupmenu direkt beim Aufruf der GUI

 

Vesuv
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 08.07.15
Wohnort: Baden-Württemberg
Version: R2016b
     Beitrag Verfasst am: 06.08.2015, 13:04     Titel: "dynamisches" Popupmenu direkt beim Aufruf der GUI
  Antworten mit Zitat      
Hallo,

ich habe bereits mit google und anderen Beiträgen hier versucht mein Problem zu lösen, bin allerdings leider erfolglos geblieben.
Vielleicht liegt es daran, dass ich bei den GUIs noch nicht ganz durchblicke..

Ich möchte gerne ein "dynamisches" Popupmenu erstellen. Im Gegensatz zu den anderen Beiträgen, möchte ich nicht erst durch einen Button ein Popupmenu starten.
Wenn ich mein Programm starten will, rufe ich die GUI auf und kann dann einige Einstellungen treffen, bevor ich es starte. Dabei möchte ich gerne dem Benutzer die Wahl zwischen bestimmten Strings treffen lassen. Das Problem ist nun, dass sich die Liste dieser Strings jedes Mal wenn ich das Programm durchlaufen lasse, ändert. Ich würde nun am ende des Programmes z.B einen cell-array entwerfen, in dem die Strings stehen und diesen in den Ordner speichern.

n-ter Durchlauf:
Code:

choose_string = {'string_a', 'string_b', 'string_c'}
 


n+1 ter Durchlauf:
Code:

choose_string = {'string_1', 'string_2', 'string_3', 'string_4'}
 

Jetzt möchte ich, dass bei Aufruf der GUI dieser Cellarray abgefragt wird und alle Strings als mögliche Auswahl in dem Popupmenu stehen. uicontrol() bringt mich ja nicht weiter... will ja nichts entwerfen..

versucht habe ich z.B ( in der Callback-funktion, ich hoffe das war nicht total falsch..).
Code:

choose_string= load('list_of_strings.mat')
set(handles.popupmenu1, 'String', choose_string)
 

das ist ein kläglicher Versuch ich weiß, aber ich bin einfach noch nicht so lange dabei, und immerhin habe ich etwas versucht Smile
_________________

never touch a running system!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.08.2015, 15:37     Titel:
  Antworten mit Zitat      
Hallo,

Was beim Öffnen der GUI passieren soll, sollte in die OpeningFcn.

Eine Möglichkeit wäre tatsächlich, in der OpeningFcn eine weitere, "kleine" GUI zur Auswahl von Möglichkeiten für die "große" GUI zu starten und die Änderungen von dort zu übernehmen.

Zitat:
Das Problem ist nun, dass sich die Liste dieser Strings jedes Mal wenn ich das Programm durchlaufen lasse, ändert.

Wie wird diese Liste denn bestimmt bzw. erstellt?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Vesuv
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 08.07.15
Wohnort: Baden-Württemberg
Version: R2016b
     Beitrag Verfasst am: 06.08.2015, 16:17     Titel:
  Antworten mit Zitat      
Hallo Harald,

erst einmal vielen dank für deine Antwort, das hat mich schon einmal ein ganzes Stück weiter gebracht!

Zitat:

Was beim Öffnen der GUI passieren soll, sollte in die OpeningFcn.

Das war also mein erster Fehler! Bei einem einfachen cellarray á la
Code:

choose_string={'dubida';'und';'lalelu'};
set(handles.popupmenu1, 'String','choose_string.mat');
 

funktioniert das Ganze jetzt auch, aber nicht mit dem cellarray, welcher im workspace gespeichert wurde Sad
kurze Fehlermeldung:
Code:
Error using set
error: mxArray must be double, char, or cell

Error in AVES>AVES_OpeningFcn (line 60)
set(handles.popupmenu1, 'String', choose_string);

Error in gui_mainfcn (line 221)
    feval(gui_State.gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});

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

dabei habe ich momentan laut Matlab einen choose_string: {6x1 cell} vorliegen...
Zitat:

Eine Möglichkeit wäre tatsächlich, in der OpeningFcn eine weitere, "kleine" GUI zur Auswahl von Möglichkeiten für die "große" GUI zu starten und die Änderungen von dort zu übernehmen.

Das soll ich wohl vermeiden. Es hieß " mach so ein fenster das runterscrollt", daraus habe ich geschlossen, dass es ein Popupmenü werden soll Very Happy

Zitat:

Wie wird diese Liste denn bestimmt bzw. erstellt?


Ich schreibe mit meinem Programm in eine Textdatei, diese Textdatei wird pro durchlauf immer wieder erweitert! Darin steht unter anderem ein Titel. Da diese textdatei allerdings auch außerhalb von Matlab bearbeitet werden kann ( was eigentlich vermieden werden soll, aber man weiß ja nie Smile ), will ich immer am Ende des Durchlaufes noch einmal alle Titel rauslesen und in einen cellarray speichern, damit wird der Fehler in einem tolerierbaren Bereich gehalten. Bevor der Benutzer das Programm nun startet soll er einen bereits vorhandenen Titel aussuchen --> dafür das popupmenu
_________________

never touch a running system!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.08.2015, 16:31     Titel:
  Antworten mit Zitat      
Hallo,

wenn genau ein Titel ausgewählt werden soll, bietet sich
Code:

an.

Ansonsten:
Code:
choose_string= load('list_of_strings.mat')
erstellt eine Struktur, in die die Variable gepackt wird. Du wolltest wahrscheinlich eher
Code:
load('list_of_strings.mat')


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Vesuv
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 08.07.15
Wohnort: Baden-Württemberg
Version: R2016b
     Beitrag Verfasst am: 06.08.2015, 16:36     Titel:
  Antworten mit Zitat      
Very Happy ich habs auch gerade gesehen Very Happy

es ist ein bisschen eklig, weil nach mir niemals jemand diesen Code debuggen darf. Ich habe jetzt einfach
Code:

load('choose_string.mat')
set(handles.popupmenu1, 'String', choose_string);
 


weil ich ja weiß, dass der cellarray in dem matfile so heißt Smile
Ich hoffe, dass die Namensgebung möglichen Debuggern das Leben erleichtert, aber ich muss dann einfach nur dafür sorgen, dass ich weit genug weg bin XD

Vielen, vielen Dank!! Jetzt funktioniert es und sieht total beeindruckend aus Smile ich könnte in die Kommentare irgendwo ein " Danke Harald" einpflegen Smile
_________________

never touch a running system!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

schön, dass ich helfen konnte :)

Wenn du gerne eine sauberere Variante möchtest:
Code:

data = load('choose_string.mat');
if ~isfield(data, 'choose_string')
error('The mat file needs to contain a variable choose_string')
end
set(handles.popupmenu1, 'String', data.choose_string);


Du könntest schließlich noch mit cellstr abfragen, ob data.choose_string ein Cell Array von Strings ist.

Grüße,
Harald
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.