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

Drop Down komplizierter als angenommen

 

FelixW
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 19.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2021, 13:59     Titel: Drop Down komplizierter als angenommen
  Antworten mit Zitat      
Hallo zusammen,

Ich habe in Matlab ein Programm geschrieben um Messwerte wahlweise von einem oder mehreren Tagen auszulesen und auszuwerten. Da funktioniert auch alles gut (mal sehen, ob meine Kollegen noch mit Sonderwünschen kommen). So viel zum Hintergrund. Bislang muss man den ersten und letzten Messtag, welchen man auswerten möchte, händisch und im korrekten Format eingeben. Um das zu erleichtern, wollte ich das ganze "mal eben" in einem Drop Down Menu umsetzten.

Ausgangsbasis ist Folgendes:

Code:
t1 = datetime(2021,9,1,0,0,0,"Format","ddMMuuuu"); % erster Messtag
t2 = datetime("today"); % Es ist unklar wie lange din der Anlage gemessen wird, wenn es einfacher ist kann hier auch eine fixe Grenze in der Zukunft gewählt werden
t = transpose(t1:t2);  % Hatte überlegt die "lesbaren" Datumsangaben und das später benötigte Format in einem array nebeneinander zu legen, daher die transponierung
tdatestring = datestr(t);
% Überführung in das im weiteren Programmverlauf benötigte Format
t_year = string(t.Year);
t_month = num2str(t.Month, '%02d');
t_day = num2str(t.Day, '%02d');
t_char1 = t_year + '-' + t_month + '-' + t_day; % Formatierung als String, aber mit den "-" "besser lesbar", ergab sich bei versuchen mit uicontrol
t_nutzbar = t_year + t_month + t_day; % Format welches zur weiterverarbeitung benötigt wird (es müssen extern generierte Dateien ausgelesen werden, die nach diesem Format benannt sind


% Messtag1  = mytemps (t_char1) % Audfruf den unten angehängten Funktion


Mein Wunsch wäre der:
Man wählt in 2 Drop Downs je einen Tag aus, der lesbarkeit halber sollen in den Drop Downs wahlweise die Einträge aus t, tdatestring, oder t_char stehen und ausgewählt werden können. Nach Bestätigung sollenin zwei Variablen z.B. Messtag_1 und Messtag_2 dann die Einträge aus t_nutzbar abgelegt werden, welche den ausgewählten entsprechen.

Verständlich erklärt? Bin ich bei meiner Recherche falsch abgebogen, oder ist das wesentlich aufwendiger (als zumindest ich) zunächst angenommen hatte?

Code:
function Messtag = mytemps(t_char1)
f = figure;
c = uicontrol(f,'Style',"Popup");
% c.Position = [20 75 60 20];
c.String = t_char1;
c.Items = t_char;
c.Callback = @selection;


    function selection(src,event)
        val = c.Value;
        str = c.String;
        str{val};
        disp(['Selection:' str{val}]);
    end;
    Messtag = c.Callback;
end


Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

so?
Code:
function Messtag = mytemps(t_char1)
f = figure;
c = uicontrol(f,'Style',"Popup");
% c.Position = [20 75 60 20];
c.String = t_char1;
c.Callback = @selection;
uiwait(f)

    function selection(src,event)
        val = c.Value;
        str = c.String;
        Messtag = str(val);
        uiresume(f)
    end
end


Wenn ein Datum in einem bestimmten Zeitraum ausgewählt werden soll (und in diesem Zeitraum jeder Tag zulässig ist) würde ich uidatepicker verwenden und die ganze Anwendung in eine schöne App packen (mit App Designer).
Code:
uidatepicker('Limit', [t1, t2])


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 19.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2021, 08:04     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für die Antwort. datepicker ist wohl das Instrument der Wahl.

Ich hab dann in der Matlabhilfe gesucht und folgenden Code gefunden.

Code:
function mydateapp
fig = uifigure('Position',[340 400 415 300]);
d = uidatepicker(fig,'DisplayFormat','MM-dd-yyyy',...
    'Position',[130 190 150 22],...
    'Value',datetime(2014,4,9),...
    'ValueChangedFcn', @datechange);

    function datechange (src,event)
        lastdate = char(event.PreviousValue);
        newdate = char(event.Value);
        msg = ['Change date from ' lastdate ' to ' newdate '?'];
        % Confirm new date
        selection = uiconfirm(fig,msg,'Confirm Date');
       
        if (strcmp(selection,'Cancel'))
            % Revert to previous selection if cancelled
            d.Value = event.PreviousValue;
        end
    end
end


Meine Versuche das ganze so anzupassen das 1. Das ausgewählte Datum in eine Variable übergeben wird und 2. Die Figure geschlossen wird, sobald ein Datum gewählt wurde, sind aber bisher gescheitert.

Ich würde gerne mit einer recht rudimentären Version arbeiten, ob ich das ganze dann hübscher in ein Fenster packe (Auswahl Messtag_1 und Auswahl:Messtag_2, vielleicht eine Abfrage, ob die gewählten Messtage korrekt sind, das würde ich dann später machen.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.10.2021, 10:39     Titel:
  Antworten mit Zitat      
Hallo,

ähnliches Prinzip mit uiwait und uiresume wie vorhin, jetzt erweitert um delete:

Code:
function newdate = mydateapp;
fig = uifigure('Position',[340 400 415 300]);
d = uidatepicker(fig,'DisplayFormat','MM-dd-yyyy',...
    'Position',[130 190 150 22],...
    'Value',datetime(2014,4,9),...
    'ValueChangedFcn', @datechange);
uiwait(fig)

    function datechange (src,event)
        % lastdate = char(event.PreviousValue);
        newdate = char(event.Value);
        % msg = ['Change date from ' lastdate ' to ' newdate '?'];
        % Confirm new date
        % selection = uiconfirm(fig,msg,'Confirm Date');
        uiresume(fig)
        delete(fig)
       
%         if (strcmp(selection,'Cancel'))
%             % Revert to previous selection if cancelled
%             d.Value = event.PreviousValue;
%         end
    end
end


Mit 'Limit' kannst du wie geschrieben den Zeitraum beschränken.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 19.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2021, 12:20     Titel:
  Antworten mit Zitat      
Nochmal Danke,

jetzt habe ich eine Version mit der ich erstmal "lebe".

Wie erwartet haben meine Kollegen noch Wünsche entwickelt und ich muss erstmal wieder substantiellere Dinge für die Datenauswertung implementieren. Hoffentlich reicht die Projektzeit am Ende noch zum Aufhübschen!

Viele Grüße

Felix
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.10.2021, 19:46     Titel:
  Antworten mit Zitat      
Hallo,

meine Empfehlung zum Aufhübschen wäre wirklich App Designer. Man kann eine schöne Oberfläche für die Funktion(en) zur Verfügung stellen und so eine App auch gut weitergeben.

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.