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

Wie verbinde ich eine GUI mit einem Skript?

 

Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.05.2009, 17:14     Titel:
  Antworten mit Zitat      
Servus pooz_gast

Prinzipiell bist Du richtig unterwegs.

Was jedoch nicht stimmt ist:
Code:
chorus3( get(handles.file, 'Value'), ...


handles.file ist kein Objekt sondern eine Variable und hat folglich auch keine "Propertys".


Funktionieren sollte das mit
Code:
chorus3( handles.file, ...
 


lg
Martin

PS.: mit
Code:
kann man "Handles finden" (ist nur eine von vielen Möglichkeiten);

Code:
erlaubt Dir Eigenschaften von Objekten abzufragen;

näheres siehe Matlabhilfe
Private Nachricht senden Benutzer-Profile anzeigen


pooz_gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2009, 11:48     Titel:
  Antworten mit Zitat      
Hi Martin,

vielen Dank, es funktioniert!
Dagnabit hat Folgendes geschrieben:

handles.file ist kein Objekt sondern eine Variable und hat folglich auch keine "Propertys".

Ich dachte, es wäre ein neuer Eintrag einer Variablen "file" in mein bestehendes Objekt "handles" aus folgendem Grund:

Zum einen referenziere ich mit dem "Punkt"-Symbol auf handles, zum anderen speichere ich mit "guidata(hObject, handles);" meine neue Variable in "handles" hinein.

Aber, ich denke, da hab ich wohl was noch nicht genau verstanden.
Dennoch Dank!
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2009, 12:18     Titel:
  Antworten mit Zitat      
Servus Pooz

handles.irgendwas ist ein sogennantes structure array; siehe Matlabhilfe zu
Code:


Darin kannst Du speichern was immer Du willst; Matrizen, Skalare, Strings, Objekte,...

Du könntest im gesamten Quelltext "handles" durch "hugo" ersetzen; das Programm sollte trotzdem laufen wie vorher.
handles ist ja auch nur ein Variablenname.


mit
Code:
guidata(hObject,handles)
wird nur die alte Variable "handles" mit der neuen (erweiterten) Variablen "handles" überschrieben.

lg
Martin

Ps1.: Ich empfehle nicht den Variablennamen "handles" mit "hugo" zu ersetzen!!! Wer weiß schon wo "handles" überall verwendet wird.

Ps2.: Ich persönlich verwende
Code:

zum Speichern von Variablen;

Wenn Du mit guide arbeitest, wird die Variable handles als Speicher für alle handles (welch Überraschung) verwendet. Um in der handles- Struktur keinen Schaden anrichten zu können, vermeide ich jede Änderung in "handles".
Das ist aber Geschmackssache.
Private Nachricht senden Benutzer-Profile anzeigen
 
krisztian
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.03.09
Wohnort: Wien
Version: 7.1.0.246 SP3
     Beitrag Verfasst am: 19.05.2009, 18:41     Titel:
  Antworten mit Zitat      
Dagnabit hat Folgendes geschrieben:
Servus Pooz


Ps2.: Ich persönlich verwende
Code:

zum Speichern von Variablen;



Das scheint genau das zu sein was ich suche.
Ich möchte einen Variablenwert mittels eines Sliders verändern.
Allerdings steig ich bei dieser ganzen Handels Sache nicht durch.
Ich hab jetzt:

Code:
% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
% hObject    handle to slider1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
disp('Slider wird bewegt!!!');
B=get(hObject,'Value');


Nur wie kann ich dieses B nun verwenden?
Also wenn ich B nun einfach nach dem ganzen von Matlab erstellten Code ausgebe sieht man da gar nicht. Ich weiß glaub ich einfach nicht an welcher Position meines COdes nun sozusagen die MAIN ist.
Ebenso hab ich ein Problem damit mir den aktuellen Wert des Sliders in einem Textfeld meiner GUI anzeigen zu lassen. Wird über setappdata funktionieren schätz ich mal. Aber wie genau versteh ich nicht da ich wieder nicht weiß wo ich was ändern muss um das auszugeben.

Grüße
krisztian
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.05.2009, 19:32     Titel:
  Antworten mit Zitat      
Servus Krisztian


Zitat:
Also wenn ich B nun einfach nach dem ganzen von Matlab erstellten Code ausgebe sieht man da gar nicht. Ich weiß glaub ich einfach nicht an welcher Position meines COdes nun sozusagen die MAIN ist.


Der von guide erstellte Code ist einfach eine Ansammlung von Funktionen.
So wird z.B. standardmäßig für ein edit-Feld eine sogenannte "edit_CreateFcn" bzw. ein "edit_Callback" erstellt.
Und es heißt z.B. immer !function! edit_Callback(hObject, eventdata, handles)"!!
Es handelt sich also um simple Funktion (wie z.B. die Funktion sqrt oder round,...)

Wenn das GUI gestartet wird, werden alle "CreateFcn" im Code ausgeführt. Callbacks werden dann ausgeführt,wenn Du z.B. etwas drückst (Button) oder ein in anderes Feld klickst(Editfeld).
Es gibt aber noch einige andere definierbare Funktion die aber immer nur ausgeführt werden, wenn die jeweilige Aktion vorangeht (ResizeFcn- wenn Du das Fenster in der Größe änderst; CloseRequestFcn- Bevor das GUI geschlossen wird; OpeningFcn...; OutputFcn...;...)


Für jedes Element (Button, listbox, editfeld,...) in Deiner GUI gibt es ein sogenanntes handle. Das handle ist eine Art Nummer, mit der das jeweilige Element eindeutig identifiziert werden kann.
Guide erstellt automatisch ein structure array mit dem Namen handles. Und in dieser Variablen handles befinden sich nun alle handles zu allen Elementen Deiner GUI.
Das handle zu einem bestimmten Element findest du über dessen 'Tag'.
Wenn Du also das editfeld mit dem 'Tag' 'Name_edit' haben willst, verwendest Du einfach
Code:
DashandlezuName_edit = handles.Name_edit;



Um mal auf Deinen Slider zu kommen:
Code:
% --- Executes on slider movement.
function slider1_Callback(hObject, eventdata, handles)
% hObject    handle to slider1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
disp('Slider wird bewegt!!!');
B=get(hObject,'Value');
set( handles.Deineditfeld, 'String', num2str(B)); % Hier schreibst Du in Dein Editfeld
setappdata( gcf, 'B', B);  % Hier speicherst Du B in der GUI
 


Wenn Du nur ein GUI- Fenster hast, wars das auch schon.
Ab dem Zeitpunkt an dem Du den Slider das erste mal betätigst, kannst Du mit
Code:

Deine Variable wieder Abfragen
_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
krisztian
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.03.09
Wohnort: Wien
Version: 7.1.0.246 SP3
     Beitrag Verfasst am: 19.05.2009, 20:58     Titel:
  Antworten mit Zitat      
Wow danke für die ausführliche Antwort. Es hilft das ganze etwas von Grund auf erklärt zu bekommen.

Werds Morgen in der FH mal testen.
Danke nochmals Smile

Grüße
krisztian
Private Nachricht senden Benutzer-Profile anzeigen
 
krisztian
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.03.09
Wohnort: Wien
Version: 7.1.0.246 SP3
     Beitrag Verfasst am: 20.05.2009, 19:02     Titel:
  Antworten mit Zitat      
Erstens funktioniert mal alles wunderbar.
Nun hab ich eine weitere Frage:
Was ist der Unterschied zwischen slider1_CreateFcn und slider1_OpeningFcn ?

Ich würde gern Min und Max Werte des Sliders festlegen sowie die Unterteilung.
Dafür hab ich hier im Forum das gefunden:

Zitat:
% --- Executes just before slidertest is made visible.
function slidertest_OpeningFcn(hObject, eventdata, handles, varargin)


%--------------eigen-----------------------------------------------------
I = imread('pout.tif'); % Start image
handles.current_data = I;
axes(handles.axes1);
imshow(handles.current_data);
%handles.sobel = 0;
%handles.edit1 = 0;
%handles.B=[0 1 2 3 4 5 6 7 8 9 10];
%set(handles.slider1,'Min',1,'Max',numel(handles.B));
set(handles.slider1,'Min',0,'Max',10)
set(handles.slider1,'Value',get(handles.slider1,'Min'));
set(handles.slider1,'SliderStep',[.0001 .010]);
set(handles.edit1,'String',num2str(get(handles.slider1,'Value')));
%------------------------------------------------------------------------


Davon brauch ich :
Code:
set(handles.slider1,'Min',0,'Max',10)
set(handles.slider1,'SliderStep',[.0001 .010]);


Nur wenn ich es unter slider1_CreateFcn einfüge bewirkt es leider gar nichts.

Grüße
krisztian
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2009, 08:52     Titel:
  Antworten mit Zitat      
Servus Krisztian

Eine OpeningFcn gibt es nur für das figure, also das GUI- Fenster.
Für die GUI- Elemente (auch Objekte oder uicontrol) hast Du die CreateFcn.

In der CreateFcn des "Slider1" schreibst Du am besten hObject statt handles.slider1.
Code:
set( hObject, 'Min', 0, 'Max', 10);
set( hObject, 'SliderStep', [.0001 .010]);


Du könnetest 'Min', 'Max' und 'SliderStep' auch in guide im Propertyinspector editieren.
_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
MatLabNooB
Forum-Guru

Forum-Guru


Beiträge: 262
Anmeldedatum: 27.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2009, 21:34     Titel:
  Antworten mit Zitat      
ich kapier es nicht! hab die ganze zeit rumprobiert... ich hab in der gui ein edit-feld, da kann ich 'hallo' eingeben, dann hol ich mir den Text mit
Code:
a=get(hObject,'String')
ab, jetzt hab ich noch einen button, der startet ein skript...was ich jetzt nicht auf die reihe bekomm, wie übergeb ich a='hallo' an eine Variable, z.B. X, in dem skript?
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 30.08.2009, 12:31     Titel:
  Antworten mit Zitat      
Moin,

an ein Skript kannst du gar nix übergeben. Werte kannst du nur an Funktionen übergeben. Wenn du dein Skript in der ersten Zeile um
Code:
ergänzt, dann kannst du dieses über die Pushbutton-Callback so aufrufen:
Code:
Skriptname(get(handles.edit1,'String'));


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.