guide - Hacer variables universales en la GUI de MATLAB
variables globales en matlab (2)
Soy nuevo en MATLAB y estoy haciendo algunos experimentos para un proyecto escolar.
Lo que quiero es una GUI con 3 botones, cuando presiona cualquiera de los dos primeros, agrega hasta uno en una variable (una variable para cada botón), y cuando presiona el tercer botón, hace algo con las variables de los primeros dos botones.
Utilicé "guía" y arrastré y solté los botones, y luego modifiqué las funciones.
Pero me di cuenta de que mis variables solo existen dentro de la función del botón, así que si las inicializo se reiniciarán cada vez que presiono el botón, y tampoco hay forma de que mi tercer botón conozca el valor de las dos primeras.
¿Hay alguna manera de hacer que estas variables siempre estén presentes? ¿O pasarlos de una función a otra?
Mi código es solo el código automático generado por "guía", con un v1 = v1 + 1; en la función de devolución de llamada de primer botón y v2 = v2 + 1 en la segunda, y disp (v1) disp (v2) en la tercera.
Espero que entiendas lo que quiero decir, no soy un hablante de inglés nativo, así que ...
De todos modos, muchas gracias, espero que sea algo fácil de arreglar.
Tienes varias opciones:
- usar variables
global
como sugirió nhowe .
Pero el uso de variables globales no es una buena práctica: vea las 10 mejores prácticas de código de MATLAB que me hacen llorar , o artículo de Wikipedia - use las funciones
setappdata
/getappdata
para almacenar sus variables (esta es la más simple) - aprenda cómo usar y actualizar correctamente la estructura de
handles
que aparece en cada función de devolución de llamada para los controles de GUI creados en GUIDE (este es más complicado).
Aquí hay un ejemplo de archivo * .m para el caso # 3. La mayor parte del código generado por GUIDE fue eliminado mostrando solo cosas relacionadas con sus variables. Básicamente, debe actualizar la estructura de handles
en cada función de devolución de llamada que realiza algunos cambios con guidata(hObject, handles);
línea. Después de esto, todas las devoluciones de llamada posteriores verán la estructura actualizada de handles
.
function varargout = GUIProgramWithVariables(varargin)
% Here goes some comment from GUIDE
% Begin initialization code - DO NOT EDIT
% . . . actual code skipped
% End initialization code - DO NOT EDIT
% --- Executes just before GUIProgramWithVariables is made visible.
function GUIProgramWithVariables_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 GUIProgramWithVariables (see VARARGIN)
% Choose default command line output for GUIProgramWithVariables
handles.output = hObject;
% Here your code starts. It should be at the end of OpeningFcn
% Add your fields to handles structure
handles.C1 = 1;
handles.C2 = 2;
handles.C3 = 3;
% this updates modified handles structure
% so all subsequent call-backs will see the changes
guidata(hObject, handles);
% --- Executes on button press in Button1
function Button1_Callback(hObject, eventdata, handles)
% hObject handle to BrowseButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Here we do the magic with Button1
handles.C1 = handles.C1 + 1;
% this updates modified handles structure
% so all subsequent call-backs will see the changes
guidata(hObject, handles);
% --- Executes on button press in Button2
function Button1_Callback(hObject, eventdata, handles)
% hObject handle to BrowseButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Here we do the magic with Button2
handles.C2 = handles.C2 + 1;
% this updates modified handles structure
% so all subsequent call-backs will see the changes
guidata(hObject, handles);
% --- Executes on button press in Button3
function Button3_Callback(hObject, eventdata, handles)
% hObject handle to BrowseButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Here we do the magic with Button3
handles.C3 = handles.C1 + handles.C2;
% this updates modified handles structure
% so all subsequent call-backs will see the changes
guidata(hObject, handles);
La siguiente no es la mejor práctica para grandes programas complicados, pero para algo simple como lo que estás tratando de hacer parece que las variables globales serían perfectas. Diga que X
, Y
y Z
son las variables que quiere compartir entre funciones. Agregue lo siguiente al comienzo de cada función que los use, y todos tendrán acceso a los mismos valores.
global X Y Z