国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Matlab實現(xiàn)多個窗口間的數(shù)據(jù)傳遞(不用GUIDE)

這篇具有很好參考價值的文章主要介紹了Matlab實現(xiàn)多個窗口間的數(shù)據(jù)傳遞(不用GUIDE)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在用多個matlab的figure進行數(shù)據(jù)交互時,數(shù)據(jù)傳入是較為簡單的,可以直接用function的形參實現(xiàn),但如何把數(shù)據(jù)傳回,是個比較麻煩的問題。

在GUIDE下,系統(tǒng)自動生成了output_fcn函數(shù),可以用它來實現(xiàn)從子窗口到主窗口的數(shù)據(jù)傳回,但如果是手寫figure,就沒有這個函數(shù)了。為此,考慮用setappdata和getappdata來實現(xiàn)這個功能。

寫了個簡單的demo程序,先看下效果:

Matlab實現(xiàn)多個窗口間的數(shù)據(jù)傳遞(不用GUIDE)

程序一上來,先打開上面的主窗口,里面的編輯框里寫了一些字符參數(shù)。點擊按鈕,可以打開第二個窗口,也就是子窗口,里面?zhèn)魅肓酥鞔翱诶锏膮?shù)。

Matlab實現(xiàn)多個窗口間的數(shù)據(jù)傳遞(不用GUIDE)

子窗口也有一個編輯框和一個按鈕,編輯框里顯示的是從主界面?zhèn)魅氲淖兞???梢栽谶@里手改。改動后,點擊按鈕,子窗口就自動消失,然后改動的變量在主界面里顯示。

?Matlab實現(xiàn)多個窗口間的數(shù)據(jù)傳遞(不用GUIDE)

這就實現(xiàn)了數(shù)據(jù)的互相傳遞了。

?下面,直接把代碼附上,在講解。

function main

% 創(chuàng)建示例數(shù)據(jù)
data.info.name = 'test';
data.info.date = '2022-10-10';
data.info.flag = 'true';
data.test = rand(10);
info = data.info;

% 創(chuàng)建窗口
hfig = figure('Tag','main_fig123',...
    'Name','主窗口',...
    'NumberTitle','off',...
    'Units','normalized',...
    'position',[0.3 0.3 0.4 0.4],...
    'Toolbar','none',...
    'MenuBar','none',...
    'Resize','on',...
    'DockControls','off',...
    'Color',[0.9255 0.9137 0.8471]);

% 創(chuàng)建按鈕控件
hbtn = uicontrol(hfig,...
    'Style','pushbutton',...
    'String','打開子窗口',...
    'Tag','ok_button',...
    'units','normalized',...
    'position',[0 0.8 1 0.1],...
    'Callback',{@sub});


% 創(chuàng)建編輯控件
hed1 = uicontrol(hfig,'Style','edit','Tag','edit1','String',info.name,...
    'units','normalized','position',[0.2 0.6 0.6 0.1]);
hed2 = uicontrol(hfig,'Style','edit','Tag','edit2','String',info.date,...
    'units','normalized','position',[0.2 0.4 0.6 0.1]);   
hed3 = uicontrol(hfig,'Style','edit','Tag','edit3','String',info.flag,...
    'units','normalized','position',[0.2 0.2 0.6 0.1]);


setappdata(hfig,'info',info);
          
end



function sub(hObj,event)

hfig = findobj('Tag','main_fig123');
if length(hfig)>1
    return;
end
info = getappdata(hfig,'info');

% 創(chuàng)建窗口
hfig_sub = figure('Tag','main_fig',...
    'Name','子窗口',...
    'NumberTitle','off',...
    'Units','normalized',...
    'position',[0.4 0.4 0.3 0.3],...
    'Toolbar','none',...
    'MenuBar','none',...
    'Resize','on',...
    'DockControls','off',...
    'Color',[0.9255 0.9137 0.8471]);

% 創(chuàng)建按鈕控件
hbtn = uicontrol(hfig_sub,...
    'Style','pushbutton',...
    'String','數(shù)據(jù)傳回',...
    'Tag','ok_button',...
    'units','normalized',...
    'position',[0 0.7 1 0.1],...
    'Callback',{@sub_btn_click});

% 創(chuàng)建編輯控件
hed1 = uicontrol(hfig_sub,'Style','edit','Tag','sub_e1','String',info.name,...
    'units','normalized','position',[0.2 0.3 0.6 0.1]);

end




function sub_btn_click(hObj,event)

% 查找子窗口的編輯框
hed1 = findobj('Tag','sub_e1');
name = get(hed1,'String');

% 查找數(shù)據(jù)
hfig = findobj('Tag','main_fig123');
if length(hfig)>1
    return;
end
info = getappdata(hfig,'info');

% 寫入新數(shù)據(jù)
info.name = name;
setappdata(hfig,'info',info);

% 關(guān)閉當(dāng)前窗口
close(gcf);

% 更新主窗口控件
hed1 = findobj('Tag','edit1');
set(hed1,'String',info.name);


end



程序不長,里面用兩個函數(shù)分別實現(xiàn)了主窗口和子窗口,另外對兩個按鈕的回調(diào)函數(shù)也進行了實現(xiàn)。主要邏輯是:

  • 在主程序里先把要傳遞的數(shù)據(jù)存入主程序的某個控件中,比如就主窗口。
  • 主程序點擊按鈕,召出子窗口。
  • 子窗口找到主窗口的句柄,然后把appdata傳過來,再顯示到控件上。
  • 子窗口點擊按鈕,將控件里的信息保存到appdata中(這里的信息是新信息)。這里其實已經(jīng)完成了數(shù)據(jù)傳遞,只要關(guān)閉窗口,并實現(xiàn)主程序的顯示邏輯即可。

還是很簡單的吧,而且都沒用到uiwait和uiresume。

?文章來源地址http://www.zghlxwxcb.cn/news/detail-432087.html

?

到了這里,關(guān)于Matlab實現(xiàn)多個窗口間的數(shù)據(jù)傳遞(不用GUIDE)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包