1. 程式人生 > >Matlab學習筆記 (一)GUI使用者圖形介面程式設計

Matlab學習筆記 (一)GUI使用者圖形介面程式設計

1. 查詢同一型別的所有控制元件:

findobj(gcf, 'type','axes') %查詢所有座標軸,gcf表示當前圖形介面

2. 不顯示座標軸:

set(handles.axes1,'xTick',[]);
set(handles.axes1,'ytick',[]);
set(handles.axes1,'box','on');

以上是設定單個座標軸,如果設定所有座標軸,handles.axes1替換為findobj(gcf, 'type','axes')

3. 完全隱藏座標軸(包括背景色):不影響圖片的顯示和更新

set(findobj(gcf, 'type','axes'),'visible','off');

4. 顯示、隱藏圖片:

cla(findobj(gcf, 'type','axes'));   %清空所有座標軸中的圖片,可修改為清空指定座標軸中的圖片 

str='F:\software\pic';

im=imread(str);
axes(handles.(sprintf('axes%d', j))); %通過變數控制顯示圖片的座標軸
imshow(im);  %%%讀取彩色影象,自動按比例縮放適應座標軸大小

axis image;  %保持座標軸不變

5. 座標軸顯示圖片後,座標軸的標籤tag被清空的問題:

使用程式碼建立axes,axes('Tag', tag, 'Position', position);

此時可以正常獲取標籤值,ax = findobj(gcf, 'type', 'axes'); tags = get(ax,'Tag'); fprintf('Tag:%s. ', tags{i});

但如果在座標軸內顯示圖片,imshow(im);

此時獲取的標籤tag值將變成空。

解決方法:建立是指定NextPlot屬性為Add,axes('Tag', tag, 'Position', position, 'NextPlot', 'Add');

參考頁面:http://www.mathworks.com/matlabcentral/answers/64097-the-axes-tag-keeps-on-deleting

                    http://www.ilovematlab.cn/thread-69688-1-1.html

6. 程式修改列表框內容:

str = get(handles.listbox1,'string');
str{end+1} = ‘new list’;
set(handles.listbox1,'string',str);

7. 獲取列表框當前選中的序號和文字內容:

id = get(handles.listbox1,'value')
str = get(handles.listbox1,'string');
content = str{id};

8. 從檔案讀取資料成為全域性變數:

OpeningFcn函式中用globle宣告全域性變數,並用load('youfile.mat')從檔案中讀取變數;

在所有需要使用該變數的函式中,用globle宣告全域性變數,然後使用該變數;

9. 儲存變數到檔案中:

增加CloseRequestFcn(在GUIDE空白處右鍵,View Callbacks);

函式最末尾內容:global identify;
save('filename.mat','identify','-append');
delete(hObject);

不需要uiwait和uiresume,除非需要使用者確認或輸入資訊。

10. 靜態字元text換行:

str = '度:';
str = [str, num2str(num), 10]; %10表示換行
str = [str, '性別:'];
set(handles.text1,'string',str); 

11. 多座標軸顯示圖片,通過滑鼠點選獲得當前座標軸,並在所點選圖片周圍畫方框表示選中:

ax = axes('Tag', tag, 'Position', position, 'NextPlot', 'Add');

fprintf('%s ', get(ax, 'Tag')); %獲得當前座標軸的標籤,也可以獲得其它資訊
hImage = imshow(im);  
axis image;
set(hImage,'ButtonDownFcn',{@selectaxes, handles});

。。。。

回撥函式如下:

function selectaxes(hobj, enent, handles) %自定義回撥函式(滑鼠點選圖片)
ax = get(gcf, 'CurrentAxes'); %獲得當前座標軸
xlim = get(ax, 'xlim'); ylim = get(ax, 'ylim');  %獲得座標軸範圍
position = [1 1 xlim(2)-1 ylim(2)-1];
delete(findobj(gcf, 'type','rectangle'));  %先清除所有已繪製的矩形
rectangle('Position', position, 'edgecolor', 'r', 'LineWidth', 2);