Matlab - al pulsar pushbutton me habra otro gui

 
Vista:

al pulsar pushbutton me habra otro gui

Publicado por Luis Miguel (15 intervenciones) el 24/10/2009 16:19:18
Buenas,

Estoy programando en Gui y llevo poco tiempo, mi duda es cuando pulso pushbutton quiero que me abra otro Gui q tengo ya creado si lo hago:
-------------------------------------------------------------------------------------------------
function pushbutton1_Callback(hObject, eventdata, handles)

m=handles.edit1;
c=handles.edit2;
k=handles.edit3;

%condiciones iniciales
X0=handles.edit4;
V0=handles.edit5;
%frecuencia natural y periodo
Wn=sqrt((k/m));

factor_amortiguamiento=(c/(2*Wn*m));

if factor_amortiguamiento == 0,

set(handles.text16,'String','SISTEMA NO AMORTIGUADO');
set(handles.pushbutton1,'callback','close all; no_amortiguados;');
end
-------------------------------------------------------------------------------------------

Si lo pongo asi tengo q pivar dos veces el boton para que se valla al otro Gui q tengo creado y quiero q me lo abra al darle una vez.
Mi otra duda es como pasar los datos q tengo introducidos en este Gui al otro que quiero q me abra.

MUCHAS GRACIAS A TODOS.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:al pulsar pushbutton me habra otro gui

Publicado por gustavo (44 intervenciones) el 24/10/2009 17:11:47
function pushbutton1_Callback(hObject, eventdata, handles)

no_amortiguados; %abre la otra gui

m=handles.edit1;
c=handles.edit2;
k=handles.edit3;
%*aqui no entiendo mucho talves sea este el codigo que necesitas para tomar lo que %hay escrito en los edit text m=get(handles.edit1,'string')

%condiciones iniciales
X0=handles.edit4; %*
V0=handles.edit5;
%frecuencia natural y periodo
Wn=sqrt((k/m));

factor_amortiguamiento=(c/(2*Wn*m));

if factor_amortiguamiento == 0,

set(handles.text16,'String','SISTEMA NO AMORTIGUADO');

%set(handles.pushbutton1,'callback','close all; no_amortiguados;');
%esto lo puedes cambiar y poner al inicio "no_amortiguados" para abrir la otra gui %desde el inicio y no esperar a que se cumpla la condicion.
end

los datos que tienes en esta gui la principal debes o puedes declararlos como globales para que al abrir la otra gui tambien sepa de los valores de estas variables..

global x %en ambas guis

%asi los valores son reconocidos.

si no te quedo muy claro puedes buscar en la pagina www.matpic.com un manual sobre interfaces graficas muy bueno ahi biene un ejemplo..de comunicacion de dos guis. muy facil.

espero haber ayudado....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:al pulsar pushbutton me habra otro gui

Publicado por Luis Miguel (15 intervenciones) el 24/10/2009 17:39:46
Buenas Gustavo,

MUCHAS GRACIAS ANTE TODO.

Gracias por mostrar interes a mi pregunta, si q me ha valido pero no me ha quedado muy claro como paso los valores que introducido en esa ventana a la otra y q me aparezcan editados.


Este son los valores que introduzco en el campo edit text y que cuando me abra la otra ventana tambien tiene los mismos campos edit text y quiero q me guarde los valores y que los edite para volver a verlos

m=handles.edit1;
c=handles.edit2;
k=handles.edit3;

%condiciones iniciales
X0=handles.edit4; %*
V0=handles.edit5;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:al pulsar pushbutton me habra otro gui

Publicado por Gustavo (44 intervenciones) el 24/10/2009 19:59:30
PERDON POR MI FALTA DE ENTENDIMIENTO... TE DOY ALGUNAS IDEAS A VER SI TE SIRVEN:

SI LO QUE QUIERES ES TOMAR LOS DATOS QUE ESCRIBES EN tus EDIT TEXT LOS DECLARAS COMO VARIABLES GLOBALES EN AMBAS GUIS .....

(en el callback del boton de la gui 1)

global m
m=get(handles.edit1,'string');

realizas tus operaciones.......

(en el callback del boton 2 de la otra gui)
%PONES

global m
set(handles.edit1,'string,m)

asi tienes los msmos valores que tenias en la primer gui.

por otro lado:::::::::::::::::::::::

... no se si al inicio declaras valores por defualt es decir valores que aparecen escritos en los edit text al inicio del programa.. seria bueno que lo icieras...........

----------------------------------------------------------------------------------------------
si lo que quieres es escribir los datos y que estos aparezcan modificados la siguiente vez que los llamas entonces debes guardar lo valores que tengas en los edit text en un archivo .mat o .txt.....

recomendaciones:

1.- crea tus variables en el workspace de matlab m=10 c=123 .... etc y guardalas todas en un archivo como: save datos.mat m c k x0 v0

2.- ya las tienes guardadas en el archivo datos.mat

3.- si lo que quieres es guardar tus variables y que apareszcan luego como las modificaste en los edit text entonces lo que debes hacer es buscar la funcion de apertura esta funcion es la que se carga al aparecer la gui y por esto es importante pues es aqui donde debes bajar los datos que guardaste y cargalos en los edit text esto lo debes acer en ambas guis:

function nombre_OpeningFcn(hObject, eventdata, handles, varargin)
global m c k x0 v0 %esto debe ir en todos los callbak donde uses las variables.

q=load ('datos.mat'); % con esto baja los datos del archivo datos.mat

%en q se encuentra un cell array conteniendo las variables.
m= q.m;
c= q.c; % y asi para las otras variables

%ahora tienes tus variables nuevas y lo que sigue es hacer una asignación para que sean los valores por default de los edit text de ambas guis.

set(handles.edit1,'string,m)
set(handles.edit2,'string,c)

4.- en el boton de la gui 1 y/o la gui 2 debes: tomar los datos y guardarlos:

global m c k x0 v0 % esto debe ir en todos los callback

m=get(handles.edit1,''string,m)
c=........
k=......

%aqui tus operavciones

%guardar modificaciones de valores
save datos.mat m c k x0 v0

5.- esto es asi ...corres la gui........descargar tus variables......las cargas en los edit text........modificas tus datos.... presionas el push.... este hace tus operaciones....y guarda los cambios en las variables... para que la proxima ves tengas estos mismos datos en tu gui......


espero no haberte enredado... a veces no me entiendo mucho......espero te sirva.....y si no te quedo claro pregunta de nuevo.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:al pulsar pushbutton me habra otro gui

Publicado por Luis Miguel (15 intervenciones) el 25/10/2009 17:00:42
Buenas Gustavo,

Gracias por atender a mis dudas te lo agradezco.

Para capturar los valores en el primer Gui lo hago de la siguiente manera,
desde:

function edit1_Callback(hObject, eventdata, handles)
M=get(hObject,'String'); %Almacenar valor ingresado
NewVal_M = str2double(M); %Transformar a formato double
handles.edit1=NewVal_M; %Almacenar en identificador
guidata(hObject,handles); %Salvar datos de la aplicación
----------------------------------------------------------------------------

En el sugundo gui lo hago igual que en el primero,
function edit1_Callback(hObject, eventdata, handles)
M=get(hObject,'String'); %Almacenar valor ingresado
........
--------------------------
Ahora en la funcion de pushbutton guardo los datos en datos.mat,

function pushbutton1_Callback(hObject, eventdata, handles)

m=handles.edit1;
c=handles.edit2;
k=handles.edit3;

%condiciones iniciales
X0=handles.edit4;
V0=handles.edit5;
save datos.mat;

------------------------------------------------------------------------
Ahora si quiero que me habra el segundo gui y los campos editados q tengo en el primero me los excriba en el segundo me indicas q ponga:

function nombre_OpeningFcn(hObject, eventdata, handles, varargin)
global m c k x0 v0 %esto debe ir en todos los callbak donde uses las variables.

q=load ('datos.mat'); % con esto baja los datos del archivo datos.mat

%en q se encuentra un cell array conteniendo las variables.
m= q.m;
c= q.c; % y asi para las otras variables

function pushbutton1_Callback(hObject, eventdata, handles)

function pushbutton1_Callback(hObject, eventdata, handles)

global m c k X0 V0

m=num2str(m);
c=num2str(c);
k=num2str(k);
X0=num2str(X0);
V0=num2str(V0);

m=set(handles.edit1,'string',m);
k=set(handles.edit2,'string',k);
c=set(handles.edit3,'string',c);
X0=set(handles.edit4,'string',X0);
V0=set(handles.edit5,'string',V0);
m=str2double(m);
k=str2double(k);
c=str2double(c);

% EN EL CASO QUE NO LOS LEA DE datos.mat, sino que los introduzca por edit_text del 2 gui.

m=handles.edit1;
k=handles.edit2;
%valores iniciales
X0=handles.edit3;
V0=handles.edit4;
--------------------------------------------------------------------------------------

Asi sería no?,

Pero me da un error al cargar los datos me dice:
Error using ==> set
Invalid handle.

Error in ==> C:\MATLAB6p5\work\prueba_no_amortiguados.m (pushbutton1_Callback)
On line 203 ==> m=set(handles.edit1,'string',m);

Error in ==> C:\MATLAB6p5\toolbox\matlab\uitools\gui_mainfcn.m
On line 66 ==> feval(varargin{:});

Error in ==> C:\MATLAB6p5\work\prueba_no_amortiguados.m
On line 17 ==> gui_mainfcn(gui_State, varargin{:});

GRACIAS POR TU ATENCIÓN.

SALUDOS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:al pulsar pushbutton me habra otro gui

Publicado por GUstavo (44 intervenciones) el 25/10/2009 22:44:47
hola....

bueno el primer problema que existe es que en datos.mat no hay nada es por eso que te marca el error pues no puede colocar el valor de m si no existe,antes te dije que podrias en el workspace de matlab acer esto para tener unos valores por default:

1.- crea tus variables en el workspace de matlab
m=12 ;
c=234;
>> save datos.mat m c
>> aaa=load('datos.mat')

aaa =

m: 12
c: 234
.............................................................................................................................................
Ahora en la funcion de pushbutton guardo los datos en datos.mat,

function pushbutton1_Callback(hObject, eventdata, handles)

m=handles.edit1;
c=handles.edit2;
k=handles.edit3;

%condiciones iniciales
X0=handles.edit4;
V0=handles.edit5;

save datos.mat; &%%%%%%%aqui te falta decir qu variables guardas......
>> save datos.mat m c k x0 v0 %asi
..................................................................................................................................................

% EN EL CASO QUE NO LOS LEA DE datos.mat, sino que los introduzca por edit_text del 2 gui.
.............................................

en ambas guis debes hacer esto:

function principal_OpeningFcn(hObject, eventdata, handles, varargin)
global m c k X0 V0
% close principal;
set(handles.edit1,'string',m)
set(handles.edit2,'string',c)

function segundo_OpeningFcn(hObject, eventdata, handles, varargin)
global m c k X0 V0
% close principal;
set(handles.edit1,'string',m)
set(handles.edit2,'string',c)

%gui 1

function pushbutton1_Callback(hObject, eventdata, handles)
%aqui tomo los valores de los edit text desde el callbak del boton es mas facil...

global m c k x0 vo
m=str2double(get(handles.edit1,'String')); %Almacenar valor ingresadoy convierte %a numero
c=str2double(get(handles.edit2,'String'));

%aqui tus operaciones recuerda que ya son numeros

segundo; %abre la otra gui llamada segundo

%en la gui 2
function pushbutton1_Callback(hObject, eventdata, handles)
principal;
global m c k X0 V0
set(handles.edit1,'string',m)
set(handles.edit2,'string',c)


creo que con eso y lo anterior es facil.....espero que con esto quede claro....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:al pulsar pushbutton me habra otro gui

Publicado por Luis Miguel (15 intervenciones) el 26/10/2009 12:39:29
Buenas Gustavo,

POR FIN ME SALIO!!

MUCHAS GRACIAS OTRA VEZ, POR TU ATENCION.

UN FUERTE SALUDO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar