build a GUI के लिए कई तरीके हैं, जैसे कि ऐप डिज़ाइनर, मार्गदर्शिका या प्रोग्रामेटिक रूप से इसे बनाने के कई तरीके हैं (मैं नीचे इस विकल्प को चित्रित करूंगा)। अपने जीयूआई घटकों और options available for sharing data between components के लिए different ways to define callback functions से अवगत होना भी महत्वपूर्ण है।
जिस दृष्टिकोण का मैं आंशिक हूं, वह कॉलबैक के रूप में nested functions का उपयोग कर रहा है। यहाँ एक उदाहरण के रूप में एक सरल GUI है:
function make_useless_button()
% Initialize variables and graphics:
iCounter = 0;
hFigure = figure;
hButton = uicontrol('Style', 'pushbutton', 'Parent', hFigure, ...
'String', 'Blah', 'Callback', @increment);
% Nested callback function:
function increment(~, ~)
iCounter = iCounter+1;
disp(iCounter);
end
end
जब आप इस कोड को चलाने के लिए, काउंटर प्रदर्शित किया एक एक करके हर बार जब आप बटन दबाएँ को बढ़ा देते चाहिए, नेस्टेड समारोह increment
make_useless_button
के कार्यक्षेत्र की पहुंच है और इस प्रकार कर सकते हैं क्योंकि iCounter
संशोधित करें। ध्यान दें कि बटन कॉलबैक function handle पर increment
पर सेट किया गया है, और यह फ़ंक्शन डिफ़ॉल्ट रूप से दो तर्क स्वीकार करना होगा: यूआई घटक के लिए एक ग्राफिक्स हैंडल जो कॉलबैक ट्रिगर करता है, और संबंधित ईवेंट डेटा की संरचना। हम इस मामले में ignore them with the ~
हैं क्योंकि हम उनका उपयोग नहीं कर रहे हैं।
अपने विशेष समस्या के लिए ऊपर दृष्टिकोण का विस्तार, आप अपने पाश जोड़ सकते हैं और कॉलबैक बदल तो यह गलत पर अपना ध्वज चर सेट कर सकते हैं:
function make_stop_button()
% Initialize variables and graphics:
keepLooping = true;
hFigure = figure;
hButton = uicontrol('Style', 'pushbutton', 'Parent', hFigure, ...
'String', 'Stop', 'Callback', @stop_fcn);
% Keep looping until the button is pressed:
while keepLooping,
drawnow;
end
% Delete the figure:
delete(hFigure);
% Nested callback function:
function stop_fcn(~, ~)
keepLooping = false;
end
end
drawnow
यहाँ की जरूरत है बटन कॉलबैक एक मौका देने का लूप के भीतर प्रोग्राम प्रवाह को बाधित करने और keepLooping
के मान को संशोधित करने के लिए।
ओपी को आउटपुट वैरिएबल को किसी और चीज़ में बदलने की आवश्यकता होगी और इसके लिए काम करने के लिए बेस वर्कस्पेस में "ग्लोबल मायवर" बनाना होगा। – Azim
क्या यह वास्तव में एकमात्र तरीका है? यह नौकरी के लिए वैश्विक वैरिएल्स का उपयोग करने के लिए तरह का झटका लगता है। – bastibe
यह सबसे अच्छा तरीका है जिसके साथ मैं आया हूं - मैं मानता हूं कि यह थोड़ा बदसूरत है, मुझे नहीं लगता कि मैटलैब जीयूआई मॉडल बहुत अच्छा है। आप गणित पर उपयोग योग्य (?) योगदान में कोड को देखना चाह सकते हैं। साइट मिनट में नीचे है। –