2014-09-24 39 views
0

我目前正在嘗試編寫一個具有兩個主要功能的GUI。首先,它應該能夠加載一堆圖像(有192個192×256灰度圖像),並通過移動滑塊使其可瀏覽。其次,無論什麼時候我點擊它應該存儲圖像的[x,y]座標。設計一個GUI來檢查MatLab中的MRI堆棧

我以爲我很好地理解了GUI如何與代碼交互,但是編寫回調函數非常混亂(這是我第一次這樣做)。我的印象是回調函數是內聯定義的。但是,每當我這樣做時,我都會收到一條錯誤消息,告訴我:「錯誤:在此上下文中不允許使用函數定義。」

以下是我的代碼。

firstSlice = 1; 
lastSlice = size(DicomImages,1); 

h = figure('Toolbar', 'none',... 
    'Menubar', 'none',... 
    'Name', 'Slice Inspector',... 
    'NumberTitle','off',... 
    'IntegerHandle','off'); 


SliceSelector = uicontrol(h, 'Style', 'slider',... 
    'Callback', @LoadNewImage); 

set(SliceSelector, 'Value',firstSlice); 
set(SliceSelector, 'Max', lastSlice); 
set(SliceSelector, 'Min', firstSlice); 

slice = get(SliceSelector, 'Value'); 

displayImage = imshow(DicomImages{1,firstSlice}); 
pixInfo = impixelinfo(displayImage); 

set(displayImage,'ButtonDownFcn',@coordInfo); 

function LoadNewImage(SliceSelector, eventdata, handles) 
    slice = round(get(SliceSelector, 'Value')); 
    imshow(DicomImages{1,slice}); 
end 

function coordInfo(cursor, eventdata, handles) 
    [x, y] = ginput(1); 
end 

當我運行它時,我收到上面發佈的錯誤消息。任何幫助/建議將受到歡迎。

回答

1

看起來您正在爲創建GUI的腳本內部定義函數。這在MATLAB中是無效的語法。函數只能在函數文件中定義。您可以通過將您的腳本變爲函數,然後從命令行或某個腳本調用該函數來解決您的問題。在第一線

功能guiSpawn

: 因此,你可以添加類似。回調可以是嵌套函數或文件的本地函數。在這裏看到有關功能的更多細節在MATLAB: http://www.mathworks.com/help/matlab/ref/function.html

+0

對不起。對我的監督。但是,當我運行代碼(現在在其他文件中的功能),我仍然得到相同的錯誤。以下是我的兩個功能。 'function [] = LoadNewImage(SliceSelector,eventdata) slice = round(get(SliceSelector,'Value')); imshow(DicomImages {1,slice}); end' 'function [x,y] = coordInfo(cursor,eventdata) [x,y] = ginput(1); end' – odnanreh12 2014-09-25 16:32:21

+0

好吧,我明白了。你能看到哪條線產生錯誤嗎?它應該在發佈的消息中。 – Jorge 2014-09-25 22:37:15

+0

使用您的第一個建議解決問題後發現問題全部解決。這麼晚纔回復很抱歉。 – odnanreh12 2014-10-02 20:58:01

0

它是更加混亂,指導不提供任何「結束」語句的功能...

據我瞭解,回調是本地函數而不是嵌套