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?

 

Kalle
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2008, 11:08     Titel: Wie verbinde ich eine GUI mit einem Skript?
  Antworten mit Zitat      
Hallo

ich möchte folgendes hinbekommen:

In einer GUI lese ich durch Textfelder Werte ein.
Je nach dem welcher Button dann gedrückt wird, werden die Werte unterschiedlich berechnet.
Die Funktionen, die die Berechnung ausführen sind jeweils in m-files gespeichert.

Meine Architektur sieht so aus:
Skript (ein m-file halt), welches Initialisierungen vornimmt und die GUI startet.
Im Skript soll dann entschieden werden: Ist Button 1 gerdück, mache das, ist Button 2 gedrück mache was anderes, usw
Die Architektur desswegen, weil das ganze noch sehr viel größer werden soll (also viele Funktionen, viele Buttons,....)

Und jetzt hörts auch schon auf:
Wie kann ich denn überhaupt einen Code schreiben, der forlaufend prüft, ob in der GUI ein Button gedrück ist oder nicht, und dann die passende Funktion aufruft?

Weil wenn ich im Skript schreibe

h = findall(0,'type','figure','Name','test_interface')
handles = guidata(h)

if get(handles.button,'Value') % Value == 1: Button Pressed
g = test_fun(1000,300,0,1,3,1,ne); %Fuktion für die Berechnung
erg = solve(g,'ne');
set(handles.result,'String','erg');
end

Dieser Code lüft mit dem Aufrufen des Skrips einmal durch.
Dabei ist der Button noch nicht gedrückt.
Somit passiert nichts.

Eine Endlosschleife um die Abfrage herum ist sicher schlecht.
Ich weiß dass das sicher mit diesen ominösen "Callback" gehen muss.

Ich habe schon viel über Kommunikation zwischen GUIs gelesen, aber ich kann das hier nicht umsetzen, ich habe ja nur eine GUI. Da bringt es auch nichts Daten über handles zwischen GUIs auszutauschen.

Ich muss dazusagen, dass ich noch nicht ganz durchgestiegen bin, bzw umsetzen kann, was callbacks sind/tun.

Ich wäre für jeden Tipp dankbar!

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


dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2008, 12:27     Titel:
  Antworten mit Zitat      
Hallo,

richtig. Die Lösung heisst Callbacks. Es gibt bereits einige Beiträge hier, die genau dies thematisieren. Ganz kurz erklärt:

Callbacks werden immer dann aufgerufen, wenn Objekt ein Event verschicken. Zum Beispiel beim Verschieben von einem Fenster, oder auch beim Drücken des "x" des Fensters. So liefert
Code:
u.a. auch CloseRequestFcn = closereq für das aktuelle Fenster.

Eine Callback-Funktion hat standardmäßig immer 2 Eingabewerte (hObject, eventdata), zum einen ein Handle auf das Objekt, das gerade ein Event verschickt hat (gedrückt - verschoben - bedient - editiert usw. wurde), und ein Feld mit zusätzlichen Daten (sind öfters leer). Man kann der Callback-Funktion natürlich auch mehr Werte übergeben.

Beispiel:
Code:
hbutton = uicontrol ('Style','PushButton');
% zuweisen der Callback-Funktion
set(hbutton,'Callback',{@meineCallbackFunktion, 1:10, 'Hallo Welt'});
% Callback-Funktion
function meineCallbackFunktion (hObject, eventdata, data, string)
figure;
plot(sin(data));
disp(string);
return


Auf die Art und Weise werden Callback-Funktionen definiert. Du kannst der Funktion natürlich auch Variablen übergeben, allerdings wird dann nur der Inhalt bei der Zuweisung übergeben (kein Pointer!). Ein eleganter Weg, dies zu umgehen, bietet
Code:
Da kann man Daten in die GUI schreiben und rauslesen. Aber das würde glaube ich schon zu speziell für dein Problem werden.

Bei weiteren Fragen einfach die Suchfunktion nutzen oder aber hier nachfragen Smile

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Kalle
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2008, 14:29     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank schon mal für die schnelle Antwort! Surprised

Jedoch kann ich diese Geschichte immer noch nicht umsetzten Confused
Das kann doch nicht so schwer sein!?

z.B. sieht mein Script so aus:

Code:

...
test_interface; % Interface, also GUI Starten
...


% geht so nicht:
% abfragen wies um den guten Button steht:
if get(handles.button,'Value') % Value == 1: Button Pressed
 tu was...
else
 tu was anderes...
end

 


Und meine GUI sieht so aus:

Code:

function varargout = test_interface(varargin)
...

% --- Executes on button press in button.
function button_Callback(hObject, eventdata, handles)
% hObject    handle to button (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
isPushed = get(hObject, 'Value')

% Was muss hier rein?


...

 


Wie kann ich denn oben "in Echtzeit" abfragen, wie der Zustand des Buttons ist?
get(handles.button,'Value') wird ja beim ersten aufrufen des Scrips ausgewertet und dann nie wieder. Ich müsste also wieder an diese Abfrage springen.
Also Button und Script sollen parallel laufen.
Geht das überhaupt?

Ich verstehe einfach nicht wie genau die Funktionen ausgeführt werden, weil ich müsste in meinem Script ja an der Stelle mit der If-Abfrage irgendwie mitbekommen, wann sich der Button bewegt hat.
Also die muss sozusagen immer überprüft werden.
Verstehtst Du was ich meine?
Und eine Endlosschleife ist schlecht, darum soll da irgendwie ein callback rein...?!
Ich kann das leider nicht besser ausdrücken.

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

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 23.10.08
Wohnort: BZ
Version: R14
     Beitrag Verfasst am: 04.11.2008, 14:49     Titel:
  Antworten mit Zitat      
hab das gleiche prob. schreibe momentan alles in das m-file was von der GUI automatisch erstellt wurde. Hab 3 axes-felder erstellt und will dort 2 bilder und einen livestream rein haben. 1 bild hab ich schon drin.
schreib ich das in die m-file-datei der gui dann gehts.

Code:

axes(handles.axes1);            % Auswahl des entsprechenden Axes-Objekts
G1=imread('cam7.png');   % Einlesen der Grafik
imshow (G1);          % Grafik ausgeben,
axis image;           %Grafik entzerren
axis off                          % Koordinatenachsen ausblenden
 


schreib ich das in mein selber erstelltes m-file kommt die fehlermeldung

Code:

??? Undefined function or variable "handles".


steige da au nicht rein in das system mit den handles. hab dazu schon alles mögliche gelesen. eine grafische anschauen dazu wäre mal gut.

sorry kalle das ich dir nicht weiterhelfen kann
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2008, 15:22     Titel:
  Antworten mit Zitat      
Hallo Kalle,

du verstehst da glaub ich etwas falsch (oder ich). Ich meine verstanden zu haben, dass du immer dann, wenn ein bestimmter Knopf gedrückt wird, eine bestimmte Aktion (Funktion, Skript) ausgeführt werden soll.

Die Funktion button_Callback(hObject, eventdata, handles) wird immer dann ausgeführt, wenn der betreffende Button (bzw. das Objekt) gedrückt wird (so steht es ja auch in der Kommentarzeile darüber). Die Zeile mit "isPushed" ist eigentlich überflüssig.

Ich versuche dir hier nun ein Minimalbeispiel darzulegen:

Code:
function main
% GUI erstellen
  fg = figure;
  % Pushbutton rein
  hPushbutton = uicontrol('Style','PushButton','String','PUSH ME');
  % Callback zuweisen
  set (hPushbutton, 'Callback', @cb_pushbutton);
return

% Callback Funktion definieren!
function cb_pushbutton (hObject, eventdata)
  disp('Pushbutton wurde gedrückt!!!');
return

Nun sollte - einmal "main" aufgerufen, immer dann wenn du den Knopf "PUSH ME" drückst, auch "Pushbutton wurde gedrückt" erscheinen (im MATLAB Command Window). Die Funktion "cb_pushbutton" wird immer dann - und nur dann - ausgeführt, falls dieser Knopf gedrückt wird. Die Überprüfung ob der Knopf gerade gedrückt wird, ist damit überflüssig!!

Ich hoffe ich konnte dir weiterhelfen.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2008, 15:29     Titel:
  Antworten mit Zitat      
Hallo Derak,

die Struktur "handles" ist in GUIDE dazu da, dass man auch andere Objekte "sehen" kann. Stell dir vor, du willst durch einen Knopfdruckes des Knopfes "meinButton" auslösen, dass in die Achse "meineAchse" irgendwas gemalt wird. Dann hast du in deiner Callback-Funktion das Problem, dass du "meineAchse" gar nicht kennst. GUIDE erschlägt dieses Problem, indem es allen Callback-Funktionen die Struktur "handles" mitgibt, das alle (oder fast alle) Handles (sowas wie Zeiger) auf die Objekte beinhaltet.
In deinem Fall scheinst du diese Variable nicht zu übergeben bzw. lässt dein Codebeispiel nicht erahnen was es gerade tut bzw. wo es sich befindet. Ein bisschen mehr Code wäre daher wünschenswert.

MfG
dib0r
Private Nachricht senden Benutzer-Profile anzeigen
 
Derak
Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 23.10.08
Wohnort: BZ
Version: R14
     Beitrag Verfasst am: 04.11.2008, 16:19     Titel:
  Antworten mit Zitat      
ok hier der m-file der automatisch erstellt wurde

Code:

function varargout = liveImg_Pic(varargin)
% LIVEIMG_PIC M-file for liveImg_Pic.fig
%      LIVEIMG_PIC, by itself, creates a new LIVEIMG_PIC or raises the existing
%      singleton*.
%
%      H = LIVEIMG_PIC returns the handle to a new LIVEIMG_PIC or the handle to
%      the existing singleton*.
%
%      LIVEIMG_PIC('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in LIVEIMG_PIC.M with the given input arguments.
%
%      LIVEIMG_PIC('Property','Value',...) creates a new LIVEIMG_PIC or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before liveImg_Pic_OpeningFunction gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to liveImg_Pic_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Copyright 2002-2003 The MathWorks, Inc.

% Edit the above text to modify the response to help liveImg_Pic

% Last Modified by GUIDE v2.5 04-Nov-2008 11:20:47

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @liveImg_Pic_OpeningFcn, ...
                   'gui_OutputFcn',  @liveImg_Pic_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before liveImg_Pic is made visible.
function liveImg_Pic_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to liveImg_Pic (see VARARGIN)

% Choose default command line output for liveImg_Pic
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes liveImg_Pic wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.
function varargout = liveImg_Pic_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% Grafik1  einfügen
axes(handles.axes1);     % Auswahl des entsprechenden Axes-Objekts
G1=imread('cam7.png');   % Einlesen der Grafik
imshow (G1);             % Grafik ausgeben,
axis image;              %Grafik entzerren
axis off                  % Koordinatenachsen ausblenden
 


in dem m-file von der GUI hab ich die letzten Zeilen ergänzt
Code:

% Grafik1  einfügen
axes(handles.axes1);     % Auswahl des entsprechenden Axes-Objekts
G1=imread('cam7.png');   % Einlesen der Grafik
imshow (G1);             % Grafik ausgeben,
axis image;              %Grafik entzerren
axis off                  % Koordinatenachsen ausblenden
 

dieser Teil wird ohne prob ausgeführt. Heißt es wird ein Bild im Axes1 angezeigt. Ich will aber eigentlich das dieses Stück code in meinem m-file steht. also hab ich versucht ein weiteres Bild in das zweite Axes zu bekommen.

hab dazu in meinem m-file folgendes geschrieben.
Code:

clc;
clear all;

global guiHandle;
%create gui
guiHandle = liveImg_Pic;

axes(handles.axes2);
dev=sr_open;
sr_acquire(dev);
[res,x,y,z] = sr_coordtrf(dev);
hf=liveImg_Pic;set(hf,'name','sr_coordtrf');colormap(gca,[ jet(127);[0 0 0]] );
hi = image('cdata', double(z'),'cdatamapping','scaled');
axis image;set(gca,'YDir','reverse');
sr_close(dev);


ich hab keine ahung wie ich mit hilfe der handles sagen kann nimm das zweite bild und zeig das im zweiten axes an. bei mir kommt nur die fehlermeldung: ?? Undefined function or variable "handles"

wie müsste ich das richtig schreiben das die GUI weiß was se zu tun hat?

danke schon mal für die Mühe

Derak
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2008, 17:12     Titel:
  Antworten mit Zitat      
Hallo,

vor dem axes-Befehl schreibe
Code:
handles = guidata(guiHandle);
Das sollte dir die handles auf die Objekte der GUI liefern. Allerdings sehe ich hier nirgends, dass eine zweite Achse (handles.axes2) erstellt wird. Falls du die noch nicht erstellt hast, kannst du die mit
Code:
handles.axes2 = axes('Units','normalized','Position',[0 0 1 1],'Parent',guiHandle)
erstellen, bzw. halt dann angepasst an deine Bedürfnisse.

Irgendwie ist mir das alles noch ein bisschen unklar: Du erzeugst eine GUI mit einer Achse und schreibst zum Zeitpunkt, wo Werte zurückgegeben werden, ein Bild in diese Achse. Nun willst du in eine zweite Achse ebenfalls etwas reinschreiben. Diese zweite Achse existiert allerdings nirgends.
Dann wiederum holst du dir Daten von irgend einem Gerät (nehme ich mal an). Die GUI wird nun ein zweites mal erzeugt (in einem anderen Fenster), das erste Bild wird wieder angezeigt und mit dem Bild vom Gerät überschrieben.

Irgendwie ist das für mich ein kleines WirrWarr. Wennn ich das richtig verstanden habe, willst du eine GUI erstellen, die 2 starre Bilder und ein sich änderndes Bild, das von einem anderen Gerät kommt, enthält. Dann würde ich es so machen, dass ich in der GUI diese zwei Bilder in die Achsen lade (in der liveImg_Pic_OpeningFcn!!) und dann in meiner Main-Funktion das Bild in der dritten Achse aktualisiere - in der Form
Code:
function varargout = liveImg_Pic(varargin)
% blablabla


function liveImg_Pic_OpeningFcn(hObject, eventdata, handles, varargin)
% HIER JETZT DAS BILD REINLADEN
G1 = imread('cam7.png');
imshow(G1,'Parent',handles.axes1);
axis(handles.axes1,'image','off');
% ZWEITES BILD REINLADEN (ANALOG DAZU)
% ....

function varargout = liveImg_Pic_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
 

und nun in deiner "main" Funktion / Skript
Code:
% Skript
hGUI = liveImg_Pic;
% hole handles
handles = guidata(hGUI);
% initialisiere Gerät
% ...
while 1
  % hole das Bild und zeichne Bild
  image(...,'Parent',handles.axes3)
end
% Gerät abmelden
% ...
 


oder so ähnlich

Nebenbei am Rande: Versuche jeden Befehl in eine neue Zeile zu schreiben. Das verschafft i.A. einen etwas besseren Überblick.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Kalle
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 03.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2008, 10:00     Titel:
  Antworten mit Zitat      
Hallo

dib0r hat Folgendes geschrieben:
Hallo Kalle,
du verstehst da glaub ich etwas falsch


Stimmt Very Happy

Was ich ursprünglich machen wollte, geht wohl gar nicht.

Ich habe jetzt eine Lösung gefunden.

Was ich machen will, ist eben die GUI "sauber" zu halten, also dass diese wirklich nur eine Maske ist und keinen zusätzlichen Code hat oder irgend was berechnet.

Das mache ich so, dass ich, wenn eine Callbackfunktion in der GUI ausgelöst wird (durch nen Button oder ein Menü) an dieser Stelle immer wieder das gleiche Skript aufgerufen wird.

Code:

% --- Executes on button press in pushbutton_TE.
function pushbutton_TE_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_TE (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
action;
 


In dem Skript lese ich dann die handles aus und reagiere darauf.
Also z.B.
if "Button 1 Gerück", öffne Funktion1.
if "Menüauswahl 4", plot(so und so)....

Code:

% script action

% get handles
h = findall(0,'type','figure','Name','interface');
handles = guidata(h)

% get values
l = str2double(get(handles.input_l,'String'));
w = str2double(get(handles.input_w,'String'));
...

syms ne;

% execute command
if get(handles.pushbutton_1,'Value'); % Value == 1: Button Pressed
   g = fun1(l,w,ne); % call function
   ...
elseif get(handles.pushbutton_TE,'Value');
...

 


Diese Struktur mit varargin, varargout, outputs = function(inputs), globale Variablen usw ist mir glaube ich zu kompliziert.

Aber vielen Dank für deine Tipps! Dadurch ist schon mehr Licht ins dunkle gekommen.

Wir hören uns sicher noch Cool

Grüße
Kalle

PS: Derak
Kein Ding! Hoffentlich konnte dir auch geholfen werden.[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2008, 11:07     Titel:
  Antworten mit Zitat      
Hallo Kalle,

nunja, ich würde das anders machen. Die Logik muss ja auch nicht in deiner GUI stehen. So ist es halt umständlich weil du immer alle GUI-Elemente abfragen musst ob die gerade was gemacht haben. Außerdem ist das wohl nicht der Sinn der Callback-Funktion, weil du ja eigentlich weisst welcher Knopf gerade gedrückt worden ist, du aber trotzdem nochmal bei allen Elementen abfragst.

Du kannst es ja sochen machen:
Jede Callback-Funktion erhält ihr eigenes Skript. z.B.
Code:
function pushbutton_TE_Callback(hObject, eventdata, handles)
action_TE;
return

function pushbutton_TX_Callback(hObject, eventdata, handles)
action_TX;
return

function slider_Callback(hObject, eventdata, handles)
action_slider;
return
usw.
Oder aber du verwendest Funktionen anstelle von Skripts. Die haben den Nachteil (oder Vorteil - wie mans nimmt), dass Variablen und Werte NICHT in den Workspace geladen werden (bzw. nicht in den "base" Workspace). Dafür können sie aber Eingabeargumente erhalten. z.B.
Code:
function pushbutton_TE_Callback(hObject, eventdata, handles)
action('TE');
return

function pushbutton_TX_Callback(hObject, eventdata, handles)
action('TX');
return

function slider_Callback(hObject, eventdata, handles)
action('slider');
return
Die Logik (in einem eigenen m-File):
Code:
function action (obj)
switch obj
  case 'TE'
    disp ('TE gedrückt');
    [...]
  case 'TX'
    disp ('TX gedrückt');
    [...]
  case 'slider'
    disp ('slider bewegt')
    [...]
end
return


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
pooz_gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.05.2009, 14:21     Titel:
  Antworten mit Zitat      
Hallo,

ich würde gerne nach drücken eines knopfes auf der GUI alle Werte meiner 6 Slider an meine eigene Funktion myfunc (a,b,c,d,e,f) übergeben und ausführen lassen.

aber folgendes klappt nicht:
get (handles.slider_1,'Value') % gibt nichtmal den Wert hinterm slider zurück.


jemand eine Idee?
Dankee!!!
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 02.05.2009, 14:49     Titel:
  Antworten mit Zitat      
Moin,

ohne Code der das Verhalten zeigt (kurz!!!) wird es schwierig.

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
 
pooz_gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.05.2009, 17:33     Titel:
  Antworten mit Zitat      
Hi,

vielen Dank. Habs hinbekommen.

Das, was mich irretieren ließ, war, dass ich diesen Befehl nicht aus dem Command-Window starten konnte. Klar, weil im Workspace ist ja nichts zu sehen. Aber warum? Warum kann ich meine Handles, wie bspw. "handles.slider_1" nicht im workspace sehen?

Gibts eine Möglichkeit, Werte von Handles anzuzeigen?
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.05.2009, 12:58     Titel:
  Antworten mit Zitat      
Die GUI- .m- files sind Funktionen, und bei Funktionen sind die Eingangsparameter nur "lokal".

Damit Du auf GUI Elemente zugreifen kannst, verwende z.B. folgenden Befehl
Code:
h = findobj( 'Tag', slider_1)


oder für alle Sliderobjekte
Code:
hs = findall( gcf, 'Style', 'slider')


lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
pooz_gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.05.2009, 16:22     Titel:
  Antworten mit Zitat      
Vielen Dank, Martin.

a) Ich wollte eigentlich auf Variablen zugreifen, die ich in einer Funktion erstelle, und nicht auf Eingabeparameter.

b) Was ist denn der Unterschied zwischen findall und "get" ?
Habe bisher versucht mit get(handles, 'Value') Werte zu bekommen.

c) alles in Allem suche ich verzweifelt Antworten auf diese Fragen, damit ich mein Programm hier zum Laufen kriege. Vergeblich: Kann den eingelesenen Dateinamen nicht aus einer Funktion in die andere übergeben. Warum?

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


chorus3( get(handles.file, 'Value'), ...
         get(handles.slider_NOMINAL_DELAY, 'Value'), ...
         get(handles.slider_CHORUS_WIDTH, 'Value'), ...
         get(handles.slider_LFO, 'Value'), ...
         get(handles.slider_BLEND, 'Value'), ...
         get(handles.slider_FEEDFORWARD, 'Value'), ...
         get(handles.slider_FEEDBACK, 'Value'));

     


% --- Executes on button press in pushbutton_load.
function pushbutton_load_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_load (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

[filename, pathname] = uigetfile( ...
{'*.wav;*.aiff','Audio Files (*.wav, *.aiff)';
   '*.wav',  'WAVE-files (*.wav)'; ...
   '*.aif*','AIFF-files (*.aif)'; ...
   '*.*',  'All Files (*.*)'}, ...
   'Please select a audio-file');

handles.file = [pathname filename]
guidata(hObject,handles)
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.