2014-08-28 77 views
0

我更關注編碼的no0b方面,所以我提前爲愚蠢的問題和/或糟糕的編碼實踐道歉。基本上,我有一個夢想,能夠點擊,放置一個點,記錄該點的位置,然後再次點擊另一點(並記錄該點的位置),直到我點擊「完成」按鈕。但是,我的代碼是橫向的。Matlab Impoint和Uicontrol

我的按鈕是用下面一行創建的。我已經在代碼中將變量j設置爲1,這是因爲我想用CallBack做兩件事,所以我想用某種方式指示按鈕已被點擊(但是,我確實作爲一種方法不附於此)。當用戶點擊按鈕時,我真的很想要1)新的隱藏點停止的循環和2)要關閉的圖像。 ('Style','pushbutton','Position',[80 0 70 20],'String','Done','CallBack','j = 0;');

我對impoints循環(與我不認爲是相關的去除多餘的東西)如下:

for k = 1:2*mboxes*nboxes 
    if j == 0 
     close(gcf); 
     break; 
    elseif j == 1 
     fprintf('At line 56, j is %d and k is %d\n', j, k) 
     h = impoint; 
     setColor(h,'k'); 
     location = h.getPosition; 
    end 

    clear h; 
end 

此刻,我的問題是雙重的。真的有三重,但我可以勉強接受第三個問題。問題1是我最關心的問題,我必須在我想完成之前單擊按鈕,也就是說,我單擊按鈕,然後在窗口關閉之前設置另一個點。 (換句話說,它比我想要的循環要多一次,我不知道該如何告訴它不要這樣做。)問題2,我相信它應該告訴我一些關於它是如何循環的,是當我走的時候,點不會被刪除(儘管h似乎在最後被刪除)。問題3雖然很美觀,但卻讓我很煩惱,因爲在點擊我真正想要的地方之前,我一直在圖像的左上角(0,0)處出現一個藍色的點。

任何幫助將是非常非常讚賞。 :)

回答

0

我不知道這件事,但我只能回答這裏未發表評論....所以我猜:

Adressing您的問題2:你 H不是完全地刪除,嘗試使用刪除(h)而不是清除。這也應該使你的問題3

解決你的問題1: impoint get的你的點擊位置無論你點擊我假設,即使你點擊你的按鈕,所以這兩個函數(獲得點擊和點擊事件)可能重疊並給你那個錯誤。也許看看setPositionConstraintFcn可以幫助你做到這一點(只需要點擊你想要的區域的點擊)。

+0

也許使用clickevent與給定的軸你的情節會比你更容易。看起來有點像這樣: 'set(get(a,'Children'),'ButtonDownFcn',{@ clickevent,a}); 函數clickevent(hObject,eventdata,a) h = get(a,'CurrentPoint'); end' – Iris 2014-08-28 11:09:42