1. 程式人生 > >Matlab 定時器或串列埠回撥函式繪圖時彈出新視窗的問題

Matlab 定時器或串列埠回撥函式繪圖時彈出新視窗的問題

原文連結: http://www.ilovematlab.cn/thread-55768-1-1.html

宣告:本文完全轉自Matlab論壇liuhuanjinliu的帖子。

本總結意在解決如下問題:利用定時器回撥函式或串列埠回撥函式在GUI指定的axes上繪圖時,曲線或圖片總是不顯示在指定的座標軸上,總是會彈出新的視窗顯示。
       利用guide來建立GUI程式時,可能大家對figure的HandleVisibility屬性以及axes的NextPlot屬性關注的不多。figure的HandleVisibility屬性有三個屬性值:on\off\callback。前兩個的含義顧名思義,其作用可以看幫助檔案,在此不詳述。最後一個callback屬性值,它是確保該figure的控制代碼(handle)對figure內的控制元件的回撥函式以及回撥函式內定義的函式來說是‘可見’的,而對於其它例如通過命令列來訪問的使用者來說是‘不可見’的,這樣可以確保該figure不被無意中刪除或修改其中的內容。
       可見,figure的HandleVisibility屬性的callback屬性值帶有明顯的保護figure的作用,是有益的。但是這種保護機制對於使用定時器或串列埠自定義回撥函式來繪製曲線的使用者來說,就會帶來麻煩。

       因為定時器或串列埠物件不是figure所包含的物件,所以其回撥函式在呼叫figure內的axes來繪圖時,就會發現找不到該figure的handle,以為該figure物件不存在,於是就會新建figure視窗,在其中建立axes來顯示的曲線。
    根據以上分析,如果使用者在利用定時器或串列埠回撥函式繪製圖形時出現上述問題,解決辦法如下:
 1、fugure‘HandleVisibily’屬性值預設為‘callback’,把它改為‘on’
    2、axes的‘NextPlot’的屬性值預設為‘replace’,改為‘add’
    3、在繪圖語句的前面使用語句axes(handles.axes1);%'axes1'為axes的'tag'

    
   先前有會員在程式設計時遇到同樣的問題,根據以上方法,問題順利解決。
   希望有遇到類似問題的會員可以參考該帖子。:-)

  以上是個人經驗,如有不足,歡迎指正修改,多謝。