2012-03-02 14 views
6

पर काम नहीं करता है मैं MATLAB GUI का उपयोग करके प्ले, पॉज़ और स्लाइडर जैसे बटनों के साथ एक साधारण वास्तविक समय डेटा व्यूअर बना रहा हूं। उपयोगकर्ता प्रेस प्ले स्लाइडर के बाद प्रत्येक चरण (प्रति सेकंड 50 नमूने) को अद्यतन करने की आवश्यकता है। वह कार्यक्षमता मैन्युअल रूप से चलती स्लाइडर के साथ हस्तक्षेप कर रही है (आपको इसे दूसरे के 1/50 वें स्थान पर ले जाना होगा)। अभी के लिए मैंने हर 50 वें समय में स्लाइडर को अपडेट करना सेट किया है (इसलिए हर सेकेंड में एक बार) और यह ठीक काम करता है, जब तक कि आप स्लाइडर को लंबे समय तक नहीं रखते हैं, तो यह अपडेट हो जाता है।Buttondownfcn स्लाइडर

समस्या यह है कि यदि स्लाइडर गुण सक्षम है, तो Buttondownfcn बाएं क्लिक के लिए काम नहीं करता है (यह सही के लिए करता है)। Buttondownfcn का उपयोग करके मैं अद्यतन को लॉक करने और पूरी तरह से समस्या को हल करने में सक्षम हो जाएगा। क्या इसके आसपास कोई रास्ता है?

% --- Executes on slider movement. 
function slider_Callback(hObject, eventdata, handles) 
disp('Slider movement') 

% --- Executes on button down. 
function slider_ButtonDownFcn(hObject, eventdata, handles) 
disp('Button down') 
+3

क्या आप कुछ न्यूनतम उदाहरण कोड दिखा सकते हैं? – tim

+1

यदि आप इस व्यवहार को अनुकरण करना चाहते हैं तो बस MATLAB GUI प्रारंभ करें और एक स्लाइडर जोड़ें। कॉलबैक के रूप में कॉलबैक और बटनडाउनएफसीएन जोड़ें और कुछ मुद्रित संदेशों को जोड़ें जैसे मैंने disp का उपयोग किया था। फिर बस संपत्ति के बीच स्विच करें (चालू/बंद) और देखें कि क्या होता है। –

उत्तर

1

आप off या inactive करने के लिए अपने स्लाइडर के Enable संपत्ति की स्थापना जब आप अपने खेलने बटन दबाएँ और ButtonDownFcn समारोह है कि खेलने के बंद हो जाता है और Enable सेट वापस on करने का उपयोग करके व्यवधान खेलने प्राप्त कर सकते हैं।

function playcallback(toggle_button, ~, slider_) 
set(slider_, 'Enable', 'inactive'); %slider is disabled 
while get(toggle_button, 'Value') %Value is used as flag for playing 
    current_value = get(slider_, 'Value'); 
    set(slider_, 'Value', rem(current_value + 0.01, 1)); %shift slider (looping) 
    pause(1/50); 
end 
set(slider_, 'Enable', 'on'); %done playing, turn slider back on 
end 

और निम्नलिखित:

का उपयोग करते हुए एक togglebutton मेरी प्ले बटन के रूप में (अन्य नियंत्रण विजेट के रूप में लंबे समय तक काम करना चाहिए के रूप में आप एक बूलियन ध्वज कहीं बचा सकता है सुलभ), मैं बटन के लिए Callback के रूप में निम्नलिखित का इस्तेमाल किया

function stopslide(~, ~, toggle_button) 
%play flag off: in playcallback, the while loop stops, 
%the slider is enabled and the playcallback function returns 
set(toggle_button, 'Value', 0); 
end 

आप इस तरह इन कॉलबैक रजिस्टर कर सकते हैं:

स्लाइडर के लिए ButtonDownFcn के रूप में

चेतावनी: यदि आप इस तरह के स्लाइडर/प्ले बटन के साथ बातचीत करने वाले अन्य विजेट जोड़ना शुरू करते हैं, तो आप दौड़ की स्थिति शुरू करने का अपना मौका बढ़ाते हैं।

+0

मुझे पता है कि मैं ऐसा कर सकता हूं लेकिन फिर डेटा को पुन: उत्पन्न होने पर आप समय नहीं बदल पाएंगे और यह बहुत उपयोगकर्ता के अनुकूल नहीं है :) –

+0

ठीक है। मुझे लगता है कि मैं पूरी तरह से समझ नहीं पा रहा हूं कि आप अपने जीयूआई में स्लाइडर का उपयोग कैसे करते हैं। क्या आपके पास एक उदाहरण एप्लिकेशन है जिसे आप दिखाने के लिए अनुकरण करना चाहते हैं? अब तक मैं इसे निम्न तरीके से समझता हूं: आपको बाहरी स्रोत से डेटा मिलता है (प्रति सेकंड 50 बार); आप एन नमूने के लिए डेटा का बफर रखते हैं; स्लाइडर का उपयोग करने के लिए कौन सा नमूना चुनने के लिए प्रयोग किया जाता है; डिस्प्ले हमेशा एक सेकंड के हर 1/50 को अपडेट नहीं करेगा, जब तक रोका नहीं जाता है। – AE426082

संबंधित मुद्दे