die Handles einliest und dann damit arbeitet.
Nun habe ich bei einem Pushbutton im Callback zu stehen, dass er dieses Skript ausführen soll. Immer wenn ich dann diesen Knopf drücke, verschiebt sich das GUI (das daraufhin Plots ausgibt) auf immer die gleiche Position, wo ich es nicht haben will.
Meine Frage ist: gibt es einen Befehl, der dem GUI sagt, dass es fixiert bleiben soll, wo es grad ist? Also nicht über "bleibe an Koordinate x und y", sondern einfach da, wo es sich im Moment des Klicks auf den Button befindet?
Oder kann ich das mit den Handles anders formulieren, falls das Problem dort liegt?
Verfasst am: 02.03.2015, 17:06
Titel: Re: GUI ändert Position bei einlesen von Handles
Hallo NicoPdm,
Effizienter ist es den Code zu entfernen, der das Verschieben des GUIs verursacht.
Setze einen Breakpoint mit dem Debugger und gehe zeilenweise durch den Code, bis Du die Zeile findest, die die Position ändert. Du könntest auch mal nach 'Position' im Code suchen.
Das GUI verschiebt sich nicht einfach aus einer Laune heraus und man muss ihm das nicht abgewöhnen. Matlab macht wirklich nur das, was man ihm explizit befiehlt.
Also es klappt alles wunderbar, bis ich über den oben schon genannten Code die Handles einlese. Ich habe es jetzt mit Breakpoints gemacht, und genau ab dieser Zeile verschiebt sich das gesamte GUI-Fenster einfach.
Hat es was damit zu tun, dass ich auf zwei Monitoren arbeite? Da das Fenster sich aber unabhängig davon, auf welchem Monitor es sich zum Moment des Klickens befindet, immer auf die gleiche Stelle auf meinem linken Monitor verschoben wird, kann ich das bald nicht glauben. Auf welchem Monitor sich das MATLAB Command Window befindet, scheint auch keine Rolle zu spielen.
Aufgerufen wird das Skript im Callback einfach, indem ich dort den Namen des Skripts eingetragen habe.
Also es klappt alles wunderbar, bis ich über den oben schon genannten Code die Handles einlese. Ich habe es jetzt mit Breakpoints gemacht, und genau ab dieser Zeile verschiebt sich das gesamte GUI-Fenster einfach.
Verstehe ich es richtig, dass sich vor dieser Zeile das Fenster nicht bewegt hat und nach dieser Zeile steht es an einer anderen Position:
In dem Fall wäre es wichtig zu wissen, was denn "Mein_GUI" ist. Ist das vielleicht der Name des M-Files, das das GUI definiert? Dann würde eine Menge Code aufgerufen, der wohl irgendwo die Position setzt. Das würdest Du heraus finden, in dem Du nicht über diese Zeile hinwegspringst mit dem Debugger, sondern in die aufgerufene Funktion hinein. (Das ist der Button rechts daneben, wenn ich mich richtig erinnere.)
GUIDATA benötigt eigentlich nur den Handle des Fensters. Statt also die Funktion aufzurufen wäre es viel praktischer den Handle direkt zu bestimmen.
Zitat:
Hat es was damit zu tun, dass ich auf zwei Monitoren arbeite?
Nein. Hier zu raten ist ein prinzipieller Fehler. Es steckt wirklich nichts magisches in Matlab. Da gibt es keine unheimlichen Fernwirkungen irgendwelcher Monitor-Anzahlen oder ähnliches.
Die Fenster-Position wird wirklich nur dann geändert, wenn irgendwo explizit die 'Position'-Eigenschaft neu gesetzt wird. Und wenn Du noch nicht gefunden hast, wo das genau geschieht, hast Du noch nicht die richtige Stelle gefunden. Dann hilft nur genauer suchen.
Zitat:
Aufgerufen wird das Skript im Callback einfach, indem ich dort den Namen des Skripts eingetragen habe.
Was bedeutet das genau? Wieso hast Du wo den Namen welches Scripts eingetragen? Meinst Du "Funktion" statt "Script"? Das ist ein wichtiger Unterschied in Matlab.
Wenn Du hier "Mein_GUI" meinst, liegt das Problem genau dort. Nutze also den Debugger um heraus zu finden, wo genau in "Mein_GUI.m" die Position neu gesetzt wird. Ändere die Zeile dort oder verwende den Handle des GUIs statt des Namens der Funktion. Sie z.B. FINDOBJ um einen Handle zu finden, falls Du ihn nicht vorher direkt speichern kannst.
(Diese Zeile steht in dem .m_file "world3_gui_sim.m", siehe weiter unten)
Danach komme ich über "Step In" (der eine Knopf rechts daneben" in die Funktion
Code:
functionvarargout = world3_gui(varargin) % WORLD3_GUI MATLAB code for world3_gui.fig % WORLD3_GUI, by itself, creates a new WORLD3_GUI or raises the existing % singleton*.
%
% H = WORLD3_GUI returns the handle to a new WORLD3_GUI or the handle to % the existing singleton*.
%
% WORLD3_GUI('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in WORLD3_GUI.M with the given input arguments.
%
% WORLD3_GUI('Property','Value',...) creates a new WORLD3_GUI or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before world3_gui_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to world3_gui_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
% Edit the above text to modify the response to help world3_gui
% Last Modified by GUIDE v2.5 27-Feb-2015 11:48:54
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @world3_gui_OpeningFcn, ...
'gui_OutputFcn', @world3_gui_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
ifnargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
Die Fenster-Position wird wirklich nur dann geändert, wenn irgendwo explizit die 'Position'-Eigenschaft neu gesetzt wird. Und wenn Du noch nicht gefunden hast, wo das genau geschieht, hast Du noch nicht die richtige Stelle gefunden. Dann hilft nur genauer suchen.
Über das Suchen-Tool habe ich nichts gefunden, wo Position steht, weder klein noch groß geschrieben. Wie kann ich mir da noch helfen?
Grad eben habe ich bemerkt, dass wenn ich über GUIDE in den GUI-Options den Haken bei "GUI allows only one instance to run (singleton)" entferne, er das GUI nicht verschiebt, er aber an der gleichen Stelle, an die er das GUI sonst verschiebt, ein zweites GUI öffnet, das aber nicht das tut, was es soll - plotten. Kann es sein, dass er das GUI also quasi nicht verschiebt, sondern einfach das alte schließt und ein neues öffnet? Wenn ja, wie verhindere ich das?
Zitat:
Zitat:
Aufgerufen wird das Skript im Callback einfach, indem ich dort den Namen des Skripts eingetragen habe.
Was bedeutet das genau? Wieso hast Du wo den Namen welches Scripts eingetragen?
Ich habe ein Skript, "world3_gui_sim.m", das die Funktion erfüllt, die vom GUI erhaltenen Variablen aus den Handles (durch
) über assignin in den Workspace zu laden. Danach startet es eine Simulink-Simulation und plottet einige Ergebnisgraphen dieser Simulation zurück auf mein GUI in drei verschiedene Axes.
Dieses Skript wird vom GUI aus über einen Pushbutton aufgerufen, nachdem ich entweder über ein Popup-Menü oder alternativ über Edit-Felder und einen Einlesen-Knopf bestimmte Werte in die Handles eingetragen habe.
Zitat:
Wenn Du hier "Mein_GUI" meinst, liegt das Problem genau dort. Nutze also den Debugger um heraus zu finden, wo genau in "Mein_GUI.m" die Position neu gesetzt wird. Ändere die Zeile dort oder verwende den Handle des GUIs statt des Namens der Funktion. Sie z.B. FINDOBJ um einen Handle zu finden, falls Du ihn nicht vorher direkt speichern kannst.
Dem kann ich leider nicht so ganz folgen. Also im GUI-.m-File kann ich wie gesagt nichts mit "Position" finden. Und das mit dem Handle des GUIs statt des Namens der Funktion verstehe ich leider gar nicht.
Hi in dem Opening sollte kein Fehler sein, da du an ihm keine Veränderung vorgenommen hast. Kannst du bitte das world3_gui zur Verfügung stellen? Weil in dem Fragment keine Fehler sind. Ich müsste die restlichen Funktionen sehen um zu verstehen was du genau gemacht hast.
functionvarargout = world3_gui(varargin) % WORLD3_GUI MATLAB code for world3_gui.fig % WORLD3_GUI, by itself, creates a new WORLD3_GUI or raises the existing % singleton*.
%
% H = WORLD3_GUI returns the handle to a new WORLD3_GUI or the handle to % the existing singleton*.
%
% WORLD3_GUI('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in WORLD3_GUI.M with the given input arguments.
%
% WORLD3_GUI('Property','Value',...) creates a new WORLD3_GUI or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before world3_gui_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to world3_gui_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
% Edit the above text to modify the response to help world3_gui
% Last Modified by GUIDE v2.5 04-Mar-2015 11:29:46
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @world3_gui_OpeningFcn, ...
'gui_OutputFcn', @world3_gui_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
ifnargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
% --- Executes just before world3_gui is made visible. function world3_gui_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 world3_gui (see VARARGIN)
% UIWAIT makes world3_gui wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. functionvarargout = world3_gui_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;
% --- Executes on selection change in popupmenu1. function popupmenu1_Callback(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Save the handles structure guidata(hObject, handles);
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array % contents{get(hObject,'Value')} returns selected item from popupmenu1
% --- Executes during object creation, after setting all properties. function popupmenu1_CreateFcn(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
world3_gui_sim;
function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (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,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a double
% --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit2_Callback(hObject, eventdata, handles) % hObject handle to edit2 (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,'String') returns contents of edit2 as text % str2double(get(hObject,'String')) returns contents of edit2 as a double
% --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit3_Callback(hObject, eventdata, handles) % hObject handle to edit3 (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,'String') returns contents of edit3 as text % str2double(get(hObject,'String')) returns contents of edit3 as a double
% --- Executes during object creation, after setting all properties. function edit3_CreateFcn(hObject, eventdata, handles) % hObject handle to edit3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit4_Callback(hObject, eventdata, handles) % hObject handle to edit4 (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,'String') returns contents of edit4 as text % str2double(get(hObject,'String')) returns contents of edit4 as a double
% --- Executes during object creation, after setting all properties. function edit4_CreateFcn(hObject, eventdata, handles) % hObject handle to edit4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit5_Callback(hObject, eventdata, handles) % hObject handle to edit5 (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,'String') returns contents of edit5 as text % str2double(get(hObject,'String')) returns contents of edit5 as a double
% --- Executes during object creation, after setting all properties. function edit5_CreateFcn(hObject, eventdata, handles) % hObject handle to edit5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit6_Callback(hObject, eventdata, handles) % hObject handle to edit6 (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,'String') returns contents of edit6 as text % str2double(get(hObject,'String')) returns contents of edit6 as a double
% --- Executes during object creation, after setting all properties. function edit6_CreateFcn(hObject, eventdata, handles) % hObject handle to edit6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit7_Callback(hObject, eventdata, handles) % hObject handle to edit7 (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,'String') returns contents of edit7 as text % str2double(get(hObject,'String')) returns contents of edit7 as a double
% --- Executes during object creation, after setting all properties. function edit7_CreateFcn(hObject, eventdata, handles) % hObject handle to edit7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit8_Callback(hObject, eventdata, handles) % hObject handle to edit8 (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,'String') returns contents of edit8 as text % str2double(get(hObject,'String')) returns contents of edit8 as a double
% --- Executes during object creation, after setting all properties. function edit8_CreateFcn(hObject, eventdata, handles) % hObject handle to edit8 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit9_Callback(hObject, eventdata, handles) % hObject handle to edit9 (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,'String') returns contents of edit9 as text % str2double(get(hObject,'String')) returns contents of edit9 as a double
% --- Executes during object creation, after setting all properties. function edit9_CreateFcn(hObject, eventdata, handles) % hObject handle to edit9 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit10_Callback(hObject, eventdata, handles) % hObject handle to edit10 (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,'String') returns contents of edit10 as text % str2double(get(hObject,'String')) returns contents of edit10 as a double
% --- Executes during object creation, after setting all properties. function edit10_CreateFcn(hObject, eventdata, handles) % hObject handle to edit10 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit11_Callback(hObject, eventdata, handles) % hObject handle to edit11 (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,'String') returns contents of edit11 as text % str2double(get(hObject,'String')) returns contents of edit11 as a double
% --- Executes during object creation, after setting all properties. function edit11_CreateFcn(hObject, eventdata, handles) % hObject handle to edit11 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit12_Callback(hObject, eventdata, handles) % hObject handle to edit12 (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,'String') returns contents of edit12 as text % str2double(get(hObject,'String')) returns contents of edit12 as a double
% --- Executes during object creation, after setting all properties. function edit12_CreateFcn(hObject, eventdata, handles) % hObject handle to edit12 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit13_Callback(hObject, eventdata, handles) % hObject handle to edit13 (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,'String') returns contents of edit13 as text % str2double(get(hObject,'String')) returns contents of edit13 as a double
% --- Executes during object creation, after setting all properties. function edit13_CreateFcn(hObject, eventdata, handles) % hObject handle to edit13 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit14_Callback(hObject, eventdata, handles) % hObject handle to edit14 (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,'String') returns contents of edit14 as text % str2double(get(hObject,'String')) returns contents of edit14 as a double
% --- Executes during object creation, after setting all properties. function edit14_CreateFcn(hObject, eventdata, handles) % hObject handle to edit14 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit15_Callback(hObject, eventdata, handles) % hObject handle to edit15 (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,'String') returns contents of edit15 as text % str2double(get(hObject,'String')) returns contents of edit15 as a double
% --- Executes during object creation, after setting all properties. function edit15_CreateFcn(hObject, eventdata, handles) % hObject handle to edit15 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit16_Callback(hObject, eventdata, handles) % hObject handle to edit16 (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,'String') returns contents of edit16 as text % str2double(get(hObject,'String')) returns contents of edit16 as a double
% --- Executes during object creation, after setting all properties. function edit16_CreateFcn(hObject, eventdata, handles) % hObject handle to edit16 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit17_Callback(hObject, eventdata, handles) % hObject handle to edit17 (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,'String') returns contents of edit17 as text % str2double(get(hObject,'String')) returns contents of edit17 as a double
% --- Executes during object creation, after setting all properties. function edit17_CreateFcn(hObject, eventdata, handles) % hObject handle to edit17 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
function edit18_Callback(hObject, eventdata, handles) % hObject handle to edit18 (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,'String') returns contents of edit18 as text % str2double(get(hObject,'String')) returns contents of edit18 as a double
% --- Executes during object creation, after setting all properties. function edit18_CreateFcn(hObject, eventdata, handles) % hObject handle to edit18 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. ifispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Save the handles structure guidata(hObject, handles);
world3_gui_sim;
% --- Executes during object creation, after setting all properties. function axes1_CreateFcn(hObject, eventdata, handles) % hObject handle to axes1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
% Hint: place code in OpeningFcn to populate axes1
% --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Eines vorneweg. es ist ziemlich redundant das ganze. du könntest mit Schleifen die Arbeit erleichtern und den Code auf wenige Zeilen reduzieren. Aber das sind dann Feinheiten
Also du suchst dir ein Szenario mit bestimmten Parametersätzen. Dann akvierst du einen Button. (Du musst nicht in jedem Case den Button aktivieren, am Ende einmal würde genügen.)
world3_gui_sim; was ist das?
Und bei welcher Interaktion verschiebt sich die GUI? Also wenn du was drückst?
Hallo stealth_mx,
dass das programmiertechnisch jetzt nicht das gelbe vom Ei ist, dachte ich mir schon. Wie gesagt, habe ich ja erst vor ein paar Wochen das erste mal MATLAB gesehen, und ich wollte es erstmal so hinbekommen, dass es funktioniert. An die Feinheiten wollte ich mich später ranwagen.
Zitat:
Also du suchst dir ein Szenario mit bestimmten Parametersätzen. Dann akvierst du einen Button. (Du musst nicht in jedem Case den Button aktivieren, am Ende einmal würde genügen.)
Genau, in einem Popup-Menü steht drin "Bitte Szenario Auswählen", "Szenario 1", "Szenario 2", ... je nachdem, welches ich da auswähle, schreibt er mir andere Parameter in die Handles-Struktur.
Das mit dem Button habe ich erstmal so gelöst, weil ich wollte, dass der "Simulation Starten"-Knopf ausgegraut ist, falls "Bitte Szenario wählen" im Popup-Menü ausgewählt ist.
Was world3_gui_sim macht, habe ich weiter oben beschrieben:
Zitat:
Ich habe ein Skript, "world3_gui_sim.m", das die Funktion erfüllt, die vom GUI erhaltenen Variablen aus den Handles (durch
)
über assignin in den Workspace zu laden. Danach startet es eine Simulink-Simulation und plottet einige Ergebnisgraphen dieser Simulation zurück auf mein GUI in drei verschiedene Axes.
Dieses Skript wird vom GUI aus über einen Pushbutton aufgerufen, nachdem ich entweder über ein Popup-Menü oder alternativ über Edit-Felder und einen Einlesen-Knopf bestimmte Werte in die Handles eingetragen habe.
Zitat:
Und bei welcher Interaktion verschiebt sich die GUI? Also wenn du was drückst?
Es verschiebt sich, sobald die Handles in world3_gui_sim geladen werden, also sobald die Zeile
ich finde in dem Code die besagte Zeile gar nicht.
Warum ist es denn nötig, die handles zu holen? Wird das aus einer anderen Funktion aufgerufen? Falls ja, würde ich an diese andere Funktion entweder die gesamte Handles-Struktur oder zumindest das Handle auf die Figure übergeben und dann
Wie schon ein paar mal gesagt wurde: Wenn der Aufruf von world3_gui zu den Problemen führt, rufe es einfach nicht auf. Die Lösung klingt wirklich trivial. Hast Du irgendeinen Grund, diese Funktion hier aufzurufen? GUIDATA benötigt nur den Handle des GUI. Der wird zwar als Nebenprodukt auch als Rückgabe des Funktions-Aufrufes geliefert, aber sich von hinten durch die Brust ins Auge zu schießen hat hier offenbar ungewollte Nebenwirkungen. Darum rate ich Dir nochmal es direkt zu machen:
Ich habe hier mal angenommen, dass Dein GUI den Tag 'world3_gui' hat. Vielleicht ist auch der Title oder Name des FIGURE-Objekts besser geeignet. Oder Du könntest den Handle irgendwo speichern, wenn das GUI zum ersten Mal erstellt wird.
Hallo Harald,
die besagte Zeile steht in dem Skript "world3_gui_sim".
Zitat:
Warum ist es denn nötig, die handles zu holen? Wird das aus einer anderen Funktion aufgerufen? Falls ja, würde ich an diese andere Funktion entweder die gesamte Handles-Struktur oder zumindest das Handle auf die Figure übergeben und dann
Ob es wirklich nötig ist, weiß ich nicht, da ich aber neu bin in der Materie bin, bin ich es so angegangen. Ich versuche nochmal, verständlich auszudrücken, was ich gemacht habe und was ich vor habe:
1) Ich habe ein GUI, "world3_gui". In diesem GUI befinden sich:
Ein Popup-Menü, in dem ich zwischen verschiedenen Szenarien auswähle. Je nachdem, welches Szenario ich auswähle, schreibe ich verschiedene Variablen in die Handles-Struktur. (Siehe den Code oben.)
2) Ein Pushbutton, in dem nichts weiter im Callback steht als "world3_gui_sim".
3) Desweiteren habe ich ein m-File namens "world3_gui_sim", das folgendes tut:
- 3.1) "handles = guidata(world3_gui);
- 3.2) assignin('base', 'Variable1', handles.Variable1); usw.
- 3.3) Start einer Simulink-Simulation, die mit den übergebenen Werten
aus den Handles arbeitet.
- 3.4) Plotten verschiedener Ergebnisse in drei verschiedene Axes.
4) Das gleiche Spiel kann ich auch über Edit-Felder machen, in denen ich manuell die Werte eingebe. Die werden dann über einen "Werte übernehmen"-Pushbutton in die Handles-Struktur geschrieben. Dann kann ich wiederum über einen Button das Skript "world3_gui_sim" starten, und er plottet mir die Ergebnisse diesmal mit den eingetragenen Werten aus den Edit-Feldern.
Alles klappt wunderbar, er plottet alles so wie er es soll. Das einzige Problem ist wie gesagt, dass sich mein GUI beim Drücken der Buttons verschiebt, die mein "world3_gui_sim" aufrufen. Über Breakpoints habe ich nun herausgefunden, dass es an der Zeile
hapert. Sobald diese ausgeführt wird, verschiebt sich mein GUI an immer die gleiche Stelle auf dem Monitor. Dazu steht auch alles weitere schon weiter oben.
Ich hoffe, du verstehst jetzt mein Problem. Ich würde mich freuen, wenn du eine Lösung weißt.
Das hat letztlich den Ausschlag gebracht, jetzt verschiebt sich nix mehr!
Ich danke euch allen recht herzlich für eure Hilfe und Geduld.
Schönes Wochenende allesamt und viele Grüße
Nico
Einstellungen und Berechtigungen
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
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.