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 von "Edit Box" in Workspace

 

Philipp68
Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 18.07.2017, 16:33     Titel: Wert von "Edit Box" in Workspace
  Antworten mit Zitat      
Hallo,
ich erstelle eine GUI nicht per guide und möchte nach dem Drücken eines pushbutton die Zahl aus einer Edit Box ins Workspace übernehmen. Bei mir scheitert es an der Funktion, die ich schreibe. Der Fehler lautet " Error while evaluating UIControl Callback."

Hier mal mein Code:

Code:

%Text fields
entry1_text = uicontrol(tab3,'Style','text','String','Time of measurement',...
    'fontsize',9,'Position',[20,300, 130, 20]);
set(entry1_text,'ForegroundColor','w','Backgroundcolor',[0.19 0.3 0.35],'FontWeight','bold','HorizontalAlignment','left');
 


Code:

%Entry Fields
handles.entry1 = uicontrol(tab3,'Style','Edit','Position', [170 300 100 20]);
 


Code:

%Save configuration

save = uicontrol(tab3,'Style','pushbutton','String','Save configuration',...
    'fontsize',9,'Position',[20,100, 248, 20],'Callback',@FunktionSave);
set(save,'Backgroundcolor','w');
 


Code:

function FunktionSave( hObject, eventdata)
value = get(handles.entry1,'String');
end
 


Weiß jemand welches problem vorliegt?
Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen


Philipp68
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 21.07.2017, 09:57     Titel:
  Antworten mit Zitat      
Habe wohl an einer falschen Stelle gesucht, um diesen Thread zu schließen poste ich meine Lösung.

Code:

entry_1 = uicontrol(tab3,'Style','edit','Position', [170 300 100 20],'Callback',@FunktionSave1);
 


Code:

function FunktionSave1(entry_1,event)
Value_1 = get(entry_1,'string');
assignin ('base','Value_1',Value_1);
end
 


Somit habe ich den Wert, den man ins Textfeld eingibt direkt im Workspace. Für weitere Verwendungen zB in ein Excel sheet zu schreiben benutze ich folgende Funktion.

Code:

function SaveConfig(hObject,event)
Value_1 = evalin('base','Value_1');
Value_2 = evalin('base','Value_2');
Value_3 = evalin('base','Value_3');
Value_4 = evalin('base','Value_4');
Values ={'Time of Measurement','Time of flicker light','Start of flicker light','SMD-LED Intensity';...
    Value_1,Value_2,Value_3,Value_4};
sheet = 1;
xlRange = 'A1';
xlswrite(['Configuration_',datestr(now,'mmmm dd, yyyy HH-MM-SS'),'.xlsx'],Values,sheet,xlRange);
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
ando_m
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 19.09.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2020, 19:42     Titel:
  Antworten mit Zitat      
ok, das hat bei mir auch geklappt - danke Wink.
Private Nachricht senden Benutzer-Profile anzeigen
 
ando_m
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 19.09.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2020, 20:01     Titel:
  Antworten mit Zitat      
Aber es gibt noch ein Problem. Die Werte erscheinen erst im Workspace, wenn ich im Befehlsfenster nochmal "return" gedrückt habe. wie kann ich das ändern? Das skript läuft in einer Schleife nach

code...
function callback()
...
endfunction
...
callback()
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp68
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 15.09.2020, 09:53     Titel:
  Antworten mit Zitat      
Hallo,
ich verstehe nicht ganz was du mit Befehlfenster und "return" meinst.
Denke ein paar mehr Infos würde helfen Wink
Arbeitest du mit AppDesigner oder schreibst du deine GUI selber?
Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
ando_m
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 19.09.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2020, 10:40     Titel:
  Antworten mit Zitat      
Ich arbeite mit Octave und benutze zum Auslesen
[code]Value_1 = get(entry_1,'string');
[code][/code]assignin ('base','Value_1',Value_1);

Das Skript läuft durch und im Workspace isrt nichts. Im Befehlsfester stehen auch schon die Zeichen der neuen Zeile
>>
Wenn ich jetzt im Befehlsfenster einmal "Enter" drücke, dann erscheinen die Variablen richitg im Workspace. Es sieht aus, als als könnte das Skript nicht richtig abschließen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp68
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 15.09.2020, 12:19     Titel:
  Antworten mit Zitat      
Ich gehe davon aus, dass wenn du deinen Eintrag gemacht hast und dann beispielsweise auf ein anderes Element oder auf einfach auf den Hintergrund deiner GUI klickst, der Cursor im Editfield verschwindet und der Eintrag dann übernommen wird. Das ist aber völlig normal. Oftmals gibt man Werte in die Felder ein und anschließend wird mit einem Pushbutton eine Aktion ausgeführt, das wäre der gleiche Effekt.

Du möchtest eine Live-Anzeige imWorkspace sobald etwas eingetragen wird, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
ando_m
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 19.09.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2020, 14:27     Titel:
  Antworten mit Zitat      
Ich habe einen "Übergabe-Button" erstellt. D.H. die Edit-Felder werden ausgefüllt und mit der Bestätigungstaste augelesen. Innerhalb der Funktion stehen die Variablen dann auch lokal zur Verfügung. In der Main sind sie aber erst nach dem extra return. Gleiches passiert übringens bei der Verwendung globaler Variabler.
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp68
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 15.09.2020, 15:06     Titel:
  Antworten mit Zitat      
Ist es viel Code? Sonst einfach mal posten.

Ich würde auch eher zum AppDesigner wechseln, bei dem man den Elementen direkt einen Callback zuweisen kann. Das würde so aussehen

Code:


% Entry-Element
app.EntryEditField = uieditfield(app.PatternLocationSizePanel, 'numeric');
app.EntryEditField.HorizontalAlignment = 'center';
app.EntryEditField.FontSize = 11;
app.EntryEditField.Position = [173 20 71 22];


% Und die hinterlegte Funktion

function EntryEditFieldValueChanged(app, event)
Entry_Value = app.EntryEditField.Value;
% Um es im Workspace zu sehen
assignin('base',"Entry_Value",Entry_Value)
end

 


Über global vars kann ich nichts sagen, habe häufig gelesen, dass man die nicht nutzen soll. Im AppDesigner kannst du dann Variablen als private oder public deklarieren, um diese dann in anderen FUnktionen nutzen zu können. Der AppDesigner ist echt gut und einfach zu verstehen. Findest du in Matlab unter Apps.
Private Nachricht senden Benutzer-Profile anzeigen
 
ando_m
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 19.09.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2020, 22:30     Titel:
  Antworten mit Zitat      
Ich nutze Octave, da gibt den Designer nicht. Aber hier ist der Code im Anhang

testGUI1.m
 Beschreibung:

Download
 Dateiname:  testGUI1.m
 Dateigröße:  2.53 KB
 Heruntergeladen:  227 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Philipp68
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 21.10.15
Wohnort: Mannheim / Ilmenau
Version: R2014a, R2017a, R2019b
     Beitrag Verfasst am: 16.09.2020, 13:03     Titel:
  Antworten mit Zitat      
Hallo,
stimmt du arbeitest mit Octave, das habe ich vergessen! Ich habe mal etwas aus einer alten GUI von mir kopiert. Die Funktion habe ich als Function-Datei im selben Pfad abgespeichert, die durch die Betätigung des Pushbutton ausgeführt wird.
Der Name der Datei und der Funktion ist Load.
Ist egal, was da bei mir da jetzt drin steht, aber das funktioniert einwandfrei und die Variablen sind bei mir direkt im Workspace. Ich habe noch nie mit Octave gearbeitet, aber vllt klappt es besser, die Funktionen separat und nicht im GUI Skript stehen zu haben?

Code:

function gui

%% Fenster

   f = figure('Visible','on','Position',[200,0,450,285]);
   set(f, 'Position', [400, 50, 1100, 800],'ToolBar','none');
   assignin('base','f',f);
   
%% Initialisierung
    uicontrol(f,'Style','pushbutton','String','Load DLL',...
        'Position',[20,750,70,25],...
        'Callback',{@Load});
end
 


Code:

    function Load(source,eventdata)
        loadlibrary('alp4395.dll', 'alp.h');
        libfunctions('alp4395');
       
        %% 2.1 AlpDevAlloc

        deviceid = uint32(0);
        ALP_ID = libpointer('uint32Ptr', deviceid); %Pointer
        DeviceNum = int32(0); %Konstante
        InitFlag = int32(0); %Konstante

        [~, ALP_ID] = calllib('alp4395','AlpDevAlloc',DeviceNum,InitFlag,ALP_ID);
   
        assignin('base','ALP_ID',ALP_ID);
        assignin('base','DeviceNum',DeviceNum);
        assignin('base','InitFlag',InitFlag);
    end  
 
Private Nachricht senden Benutzer-Profile anzeigen
 
ando_m
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 19.09.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2020, 06:50     Titel:
  Antworten mit Zitat      
Danke. Leider spielt Octave nicht mit. Da gibt es ein paar benötigte packages nicht und ach keine alternativen. Ich werde das Problem jetzt anders lösen. Nann mach ich halt ein Eingabefenster und ein separates ausgabefenster. Das geht auf jeden Fall.
Trotzdem nochmal Danke Smile.
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.