天天看點

MATLAB GUI之ABC

GUIDE

屬性設定

name 更改名字

logo

在GUI的“.m”檔案中的OpeningFcn函數或者OutputFcn函數中添加以下代碼:

% 設定頁面左上角的 LogoI = imread( 'Logo.jpg' ); % Logo.jpg為指定的圖示javaImage = im2java( I );newIcon = javax.swing.ImageIcon( javaImage );figFrame = get( handles.figure1, 'JavaFrame' ); % 取得Figure的JavaFramefigFrame.setFigureIcon( newIcon ); % 修改圖示

本問題參考了網址:https://blog.csdn.net/hycwoaiyl/article/details/80113594

————————————————

版權聲明:本文為CSDN部落客「Daniel__Shi」的原創文章,遵循 CC 4.0 BY-SA 版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/shitao99/article/details/85955726

全局變量

“在函數或基本工作空間中,用global聲明的變量為全局變量。”

“聲明了全局變量的函數或基本工作空間,共享該全局變量,都可以給它指派。”

“如果函數的子函數也要使用全局變量,也必須用global聲明。”

“全局變量要放在函數開始處聲明。”

在gui顯示圖像的toolbar

set( hObject, 'toolbar', 'figure' ); % 在菜單欄顯示figure工具條的内容

GUI放到螢幕中央

需要選擇其中一種代碼,将其放置在GUI界面的XXX_OpeningFcn()函數下即可。 推薦使用前三種實作,簡潔實用。

movegui( handles.figure1, 'center' ) % figure1為目前GUI界面的Tag

movegui( gcf, 'center' ); % 将GUI界面放置在桌面中央

movegui( hObject, 'center' ); % 将GUI界面放置在桌面中央

GUI的M檔案

在MATLAB GUI中,資料分兩種:GUI data和application data。 兩種資料的存取機制是相同的,但是GUI data使用起來比較友善。

每一個GUI 圖形界面都維持一個和自己的界面的圖形(figure)相聯系的一個handles資料結構,這個資料結構中容納圖形界面内所有控件(按鈕、清單框、編輯框等)的句柄,相當于一個大的“容器”,裡面存放了figure内所有控件的句柄。同時,handles結構也可以被figure内所有控件的回調函數通路,因為回調函數的輸入參數中都有handles結構。此外,在控件的回調函數内可以把資料存儲到handles結構中。

handles結構資料的取得和存儲是通過guidata函數來實作的。

例如:在編輯框edi的回調函數内想獲得t編輯框的句柄,hObject可以,也可以用handles.edit,這兩個值是一樣的,沒有差別,隻不過獲得控件句柄的方式不同而已:hObject是調用回調函數時直接傳過來的,handles.edit是從handles結構中取得的。但是,在控件的CreateFcn函數中如果想通路控件,必須用hObject,而不能用handles.edit,因為這時控件還沒被建立,其句柄還沒有加入到handles結構中。

各控件的回調函數中,hObject的值是不一樣的,分别代表調用回調函數的控件的句柄,而handles結構卻是一樣的。這種機制便于figure内的不同控件的回調函數内傳遞資料。

Opening函數架構

GUI 檔案執行函數的順序是:

Opening函數−>Output函數−>回調函數Opening函數−>Output函數−>回調函數

并且,Opening 函數 、 Output 函數隻執行在開始運作時執行一次。

若要根據使用者的要求,輸出到指令行,可以使用暫停和就行函數:uiwait,uiresumeuiwait,uiresume

具體如下

(1)添加 uiwait 到 Opening 函數中(如上,uiwait(handles.figure1);)

(2)在期望相應的回調函數中,更新 handles.output 值,并執行 uiresume。

回調函數

hObject, 目前 figure 句柄

eventdata, 附加參數,一般用不到

handles,目前 GUI 句柄,包含所有 GUI 對象的資訊

  • 利用函數 get 來取得句柄中的資料值,利用 set 來改變句柄中資料的值,并利用global 在不同的控件中共享資料。
  • 設定:set(handles.控件的tag,'要設定的屬性名','要設定的屬性值')。比如:set(handles.edit1,'string','hello world');
  • 擷取:get(handles.控件的tag,'要擷取的屬性名')