簡體   English   中英

無法從函數訪問句柄

[英]Can't access handles from a function

我正在嘗試使用GUIDE創建GUI,GUIDE通過串行通信讀取字符串。 之后,它將切出所需的數字並將其顯示在屏幕上。 我創建了此函數,每次在COM端口的緩沖區中有一行數據時都將執行該函數:

function out = intcon1(hObject, eventdata, handles)
global comPort;
a=fgetl(comPort);
disp(a);

a(a==' ') = '';
indexstart=strfind(a,'[');
indexend=strfind(a,']');
measureddata=a(indexstart(1):indexend(1));
commas=strfind(measureddata,',');

re1data=measureddata(2:(commas(1)-1));
re2data=measureddata((commas(1)+1):(commas(2)-1));
im1data=measureddata((commas(2)+1):(commas(3)-1));
im2data=measureddata((commas(3)+1):(commas(4)-1));
temp1data=measureddata((commas(4)+1):(commas(5)-1));
temp2data=measureddata((commas(5)+1):(commas(6)-1));

old_str=get(handle.re1, 'String');
new_str=strvcat(old_str, re1data);
set(handles.listbox8, 'String', re1data);

現在,我正在嘗試將數據放入列表框。 這只是第一個值。 Matlab一直在說,問題是未定義句柄。 但是我已經使用以下代碼創建了一個用於清除列表框的按鈕:

function clearlists_Callback(hObject, eventdata, handles)
% hObject    handle to clearlists (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
set(handles.listbox8, 'String', '');

有誰知道這個問題是什么以及如何解決?

串行端口回調GUIDE回調不同。 如果是串行端口回調,則您的對象句柄是串行端口對象,而該事件是串行事件。 沒有第三個參數,因此handles是未定義的。

如果你想找回您的GUI從這個函數內處理你需要明確這樣做,類似於你檢索的方式comport手柄-順便說一句讓comport這種方式可能是不必要的,因為我想像這是同一個對象回調已作為hObject接收。

由於在這種情況下, handles特定GUIDE的數據 ,因此檢索它的“正確”方法是:

handles = guidata(gcf);

如果您的GUI有多個圖形,則可能需要使用findobj()而不是gcf()來獲得正確的gcf()

您可能使用不帶其他參數的函數句柄語法定義了BytesAvailableFCN,像這樣

s.BytesAvailableFCN = @myfun();

相反,您需要使用單元格數組來定義回調,如文檔中此處所述 例如,

s.BytesAvailableFCN = {'myFun', handles};

運行該行時,必須已經在您的工作空間中定義了handles

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM