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

Wert aus Slider in Textfeld anzeigen

 

Bennrich
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.08.17
Wohnort: Dortmund
Version: R2015b
     Beitrag Verfasst am: 07.08.2017, 11:19     Titel: Wert aus Slider in Textfeld anzeigen
  Antworten mit Zitat      
Hallo zusammen,

ich bin grade dabei eine GUI zu programmieren, habe dabei aber ein paar Probleme was die Verknüpfung verschiedener Elemente angeht.
Mittels Slider möchte ich einen Winkel von 0 .. 90° einstellen:
Code:
%Slider erstellen
Verdrehwinkel_Walzen = uicontrol('Style', 'slider',...                  
                        'Min',0,'Max',90,'Value',0,...
                        'SliderStep', [0.011111111 0.011111111111],...  
                        'Units','normalized',...
                        'Position', [0.05 0.575 0.1 .03],...
                        'Callback', @Verdrehwinkel_Walzen_callback);
 


Zur Kontrolle lasse ich mir den aktuellen Wert anzeigen und speichere den Winkel in einer Datei ab.Die zugehörige Funktion sieht folgendermaßen aus:
Code:
%Callback Slider
    function Verdrehwinkel_Walzen_callback(source,event,handles)
        Drehwinkel = source.Value;
        str=Drehwinkel;
        Anzeige=['Verdrehwinkel beträgt ' num2str(Drehwinkel) '° '];
        disp(Anzeige)
        save ('Variable_Drehwinkel.mat','Drehwinkel');

    end
 


Für die Übersichtlichkeit möchte ich den Winkel zusätzlich in einem Textfeld anzeigen lassen. Hier komme ich leider nicht weiter.

Mein Ansatz war es, die Definition des Sliders folgendermaßen zu verändern:
Code:

Verdrehwinkel_Walzen = uicontrol('Style', 'slider',...                  
                        'Min',0,'Max',90,'Value',0,...
                        'SliderStep', [0.01111111111 0.0111111111111],...  
                        'Units','normalized',...
                        'Position', [0.05 0.575 0.1 .03],...
                        'Callback', {@Verdrehwinkel_Walzen_callback, txt_Verdrehwinkel});
 


Die Datei txt_Verdrehwinkel sah dann wie folgt aus:
Code:

function txt_Verdrehwinkel_Callback(hObject, eventdata, handles)
% hObject    handle to SimulationStart (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

disp('angekommen')
 


Damit wollte ich zumindest überprüfen, ob ich beim Betätigen des Sliders in die Funktion rein komme. Das passiert aber offensichtlich nicht. Folgende Fehlermeldung wird angezeigt:
Code:

Error using txt_Verdrehwinkel_Callback
Too many output arguments.

Error in GUI_Versuchsstand (line 85)
                        'Callback', {@Verdrehwinkel_Walzen_callback, txt_Verdrehwinkel_Callback});
 


Ich wäre euch sehr dankbar, wenn Ihr mich auf meinen Fehler aufmerksam machen würdet und mir eine mögliche Umsetzung zeigt.

Viele Grüße
Benni
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: 09.08.2017, 13:36     Titel: Re: Wert aus Slider in Textfeld anzeigen
  Antworten mit Zitat      
Hallo Bennrich,

Beim Update eines Sliders jedesmal ein File zu schreiben, könnte den Code bervig ausbremsen.

Code:
'Callback', {@Verdrehwinkel_Walzen_callback, txt_Verdrehwinkel});

Und welche Absicht steckt dahiner? Suche mal in der Dokumentation unter "Callback". Der gezeigte Code erstellt einen Callback, der die Funktion "Verdrehwinkel_Walzen_callback" mit den Argumenten "hObject, EventData, txt_Verdrehwinkel" auf. Laut Deiner erklärung enthält die Datei "txt_Verdrehwinkel" dann den Callback namens "txt_Verdrehwinkel_Callback"

Das ist ziemlich durcheinander.
1. Die Datei sollte so heißen, wie die erste Funktion darin, um Konfusion zu vermeiden. Der Editor sollte eine netsprechende Warnung anzeigen. Bitte nicht ignorieren.
2. Der dritte Parameter des Callbacks sollte nicht der Aufruf eines weiteren sein. Ich vermute, Du willst einfach nur im Callback des sliders das Text-Feld beschreiben. Dazu benötigst Du keinen weiteren callback.

Zitat:
'Callback', {@Verdrehwinkel_Walzen_callback, txt_Verdrehwinkel_Callback});

Aha, diese Zeile taucht im gezeigten code nicht auf. Ist es diese:
Zitat:
'Callback', {@Verdrehwinkel_Walzen_callback, txt_Verdrehwinkel});


Lösungsvorschlag:
Code:
Verdrehwinkel_Walzen = uicontrol('Style', 'slider',...                  
                        'Min',0,'Max',90,'Value',0,...
                        'SliderStep', [0.011111111 0.011111111111],...  
                        'Units','normalized',...
                        'Position', [0.05 0.575 0.1 .03],...
                        'Callback', {@Verdrehwinkel_Walzen_callback, handles});

%Callback Slider
    function Verdrehwinkel_Walzen_callback(source,event,handles)
        Drehwinkel = source.Value;
        str=Drehwinkel;
        Anzeige=['Verdrehwinkel beträgt ' num2str(Drehwinkel) '° '];
        disp(Anzeige)
        save ('Variable_Drehwinkel.mat','Drehwinkel');

        set(handles.text1, 'String', Anzeige);   % <-- hier entsprechend setzen
    end

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.08.17
Wohnort: Dortmund
Version: R2015b
     Beitrag Verfasst am: 09.08.2017, 22:01     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für deine Antwort. Mit der Feststellung, dass der Code durcheinander ist, hast du leider recht. Leider fehlt mir an einigen Ecken noch das Verständnis für das Programm. Deshalb habe ich versucht deinen Lösungsvorschlag in einem kleinen Testprogramm umzusetzen:

Code:
%GUI_test
clc;
clear all;
close all;

figure

text1 = uicontrol('Style','edit',...
                        'Units','normalized',...
                        'Position',[.5 .45 .10 .1],...
                        'String','Hier Text eingeben');
                   
Verdrehwinkel_Walzen = uicontrol('Style', 'slider',...                  
                        'Min',0,'Max',90,'Value',0,...
                        'SliderStep', [0.011111111 0.011111111111],...  
                        'Units','normalized',...
                        'Position', [0.05 0.575 0.1 .03],...
                        'Callback', {@callback_slider, handles});  
 


Die zum Slider gehörige Callback-Funktion:
Code:
%callback_slider
    function callback_slider(source,event,handles)
        Anzeige='Verdrehwinkel ...';
        disp(Anzeige)
        set(handles.text1, 'String', Anzeige);
    end
 


Wenn ich die Datei laufen lasse, kommt folgende Fehlermeldung:
Code:

Undefined function or variable 'handles'.

Error in GUI_test (line 17)
                        'Callback', {@callback_slider, handles});
 
 


Wo muss ich "handles" denn definieren? Ich war der Meinung, dass es beim Erstellen der Slider/Edit-Felder automatisch erzeugt wird. Nochmals vielen Dank für deine ausführliche Antwort und die Nachsicht mit einem Anfänger.

Viele Grüße
Benni
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: 10.08.2017, 07:58     Titel:
  Antworten mit Zitat      
Hallo,

das automatische Erzeugen der Handles-Struktur erfolgt nur, wenn du GUIDE verwendest. Wenn du die Oberfläche mit Befehlen erzeugst, musst du auch die Handles-Struktur selbst erzeugen, z.B.
Code:
handles.text1 = uicontrol(...)


Gerade Anfängern würde ich aber GUIDE oder, ab R2016a, den neuen App Designer empfehlen, da man dort ein Gerüst hat, an dem man sich orientieren kann.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.08.17
Wohnort: Dortmund
Version: R2015b
     Beitrag Verfasst am: 10.08.2017, 10:17     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank! Jetzt funktioniert es. Ich habe versucht ohne GUIDE zu programmieren, da ich gehofft habe, ein besseres Verständnis für das aufzubauen, was passiert.

Viele Grüße
Benni
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.