Matlab जीयूआई में एक 'addlistener' फ़ंक्शन का उपयोग करके "प्राप्त करने में त्रुटि"



user-interface get (1)

मैटैब जीयूआई कोड में मुझे एक समस्या है उदाहरण के लिए कहें कि मैं GUI में स्लाइडर कर्सर के मूल्य को कंसोल में प्रदर्शित करना चाहता हूं। लेकिन तथ्य यह है कि मैं इसे वास्तविक समय में प्रदर्शित करना चाहता हूं, उदाहरण के लिए कर्सर की प्रत्येक स्थिति पर, अगर क्लिक अभी भी चल रहा है, इसे ले जाने के दौरान।

इसके लिए, मैंने इंटरनेट पर पढ़ा कि 'addlistener' फ़ंक्शन मुझे मदद कर सकता है मैं इसे इस तरह slider_CreateFcn फ़ंक्शन में डाल दिया:

function slider1_CreateFcn(hObject, eventdata, handles)
   h=addlistener(hObject,'Value','PostSet',@(~,~)slider1_Callback)

फिर, मैंने कॉलबैक फ़ंक्शन में एक सरल disp फ़ंक्शन जोड़ा, जैसे:

function slider1_Callback(hObject, eventdata, handles)
    get(hObject,'value')

इस कोड को चलाना इस त्रुटि को बढ़ाता है:

Warning: Error occurred while executing callback:
Error using get
Cannot find 'get' method for matlab.graphics.internal.GraphicsMetaProperty class.

Error in untitled>slider1_Callback (line xx)
get(hObject,'value')

अगर मैं addlistener फ़ंक्शन को addlistener , तो जाहिर है कि अपडेट अब वास्तविक समय में नहीं है, लेकिन मुझे त्रुटि संदेश नहीं मिला। तो मुझे लगता है कि समस्या सीधे addlistener फ़ंक्शन से आ रही है।

क्या हो रहा है और मैं इसे कैसे ठीक कर सकता हूं?


सबसे पहले, जो कोड आपने पोस्ट किया वह कोड नहीं है जो आपकी त्रुटि पैदा कर रहा है। मैं अनुमान लगा रहा हूं कि आपकी त्रुटि उत्पन्न हुई कोड इस तरह दिखता है:

h = addlistener(hObject, 'Value', 'PostSet', @slider1_Callback);

इस उदाहरण में, एक मेटा प्रॉपर्टी को slider1_Callback के पहले इनपुट तर्क के रूप में पारित किया गया है जो आपको तत्काल त्रुटि दे रहा है जो आप देख रहे हैं

कहा जा रहा है कि, अगर आप slider1_Callback कॉल करना चाहते हैं, तो आपको एक अनाम फ़ंक्शन बनाने की ज़रूरत है जो वास्तव में कॉलबैक फ़ंक्शन के लिए इनपुट के सही प्रकार (और संख्या) गुजरती हैं। ये एक ऐसा है जो ऐसा करता है

function slider1_CreateFcn(hObject, eventdata, handles)
    h = addlistener(hObject, 'Value', 'PostSet', ...
                    @(src,evnt)slider1_Callback(hObject, [], handles))
end

हालांकि बेहतर काम करने के लिए, केवल एक अलग कॉलबैक का उपयोग करने के बजाय, वह मार्गदर्शिका जो आपके लिए बनाता है यह आपको थोड़ी अधिक लचीलापन देता है इसके अलावा, यदि आप मूल्य प्रदर्शित करना चाहते हैं तो आपको अन्य सभी निविष्टियों की आवश्यकता नहीं है और आप वास्तव में अलग फ़ंक्शन के बजाय संपूर्ण कॉलबैक को इनलाइन कर सकते हैं।

h = addlistener(hObject, 'Value', 'PostSet', @(s,e)disp(get(hObject, 'Value')));

और इसे कार्रवाई में दिखाने के लिए: