Dynamically changing values displayed on GUI
2 次查看(过去 30 天)
显示 更早的评论
Hi, I am well conversant with making basic MATLAB GUI. However, I want some specialized features as follows: 'As a user slides the slider, I want a bucket to get filled with water'. Hence, if the user slides to 50% of total slider value, the bucket must dynamically change the level of water and show the bucket to be half full.
Any suggestions to accomplish this and integrate such dynamic objects on GUI screen?
7 个评论
Walter Roberson
2012-5-5
How realistic does the bucket have to look? Like is a plain rectangle good enough? A trapazoid? Does it have to look like a traditional wooden bucket like http://4.bp.blogspot.com/-YciJsaGk2oI/TWsxVFG2leI/AAAAAAAAAEk/3qlIXRAyv3U/s1600/WoodenBucket3DModelZoom.jpg
采纳的回答
Image Analyst
2012-5-5
Here's the demo code using patch():
workspace;
fontSize = 20;
% Ask user for a number.
defaultValue = 45;
titleBar = 'Enter a value';
userPrompt = 'Enter the percent full';
caUserInput = inputdlg(userPrompt, userPrompt, 1, {num2str(defaultValue)});
if isempty(caUserInput),return,end; % Bail out if they clicked Cancel.
usersValue = str2num(cell2mat(caUserInput));
% Check for a valid number.
if isempty(usersValue)
% They didn't enter a number.
% They clicked Cancel, or entered a character, symbols, or something else not allowed.
usersValue = defaultValue;
message = sprintf('I said it had to be an number.\nI will use %d and continue.', usersValue);
uiwait(warndlg(message));
end
%======== KEY CODE RIGHT HERE ====================
X = [0 1 1 0];
Y = [0 0 usersValue usersValue];
C = [.3 .5 .8];
patch(X,Y,C)
% Make the plot look nice.
grid on;
ylim([0 100]);
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
caption = sprintf('Bucket filled %g%%with water', usersValue);
title(caption, 'FontSize', fontSize);
ylabel('Percent full of water', 'FontSize', fontSize);
更多回答(1 个)
Image Analyst
2012-5-4
How about you take photos of a bucket with 100 different levels of water. Then you set the slider to go from 0-100. When the user slides the slider, you get the number, and recall the corresponding image and display it?
sliderValue = int32(get(handles.slider, 'Value'));
baseFileName = sprintf(image_%d.PNG', sliderValue);
fullFileName = fullfile(folder, baseFileName);
if exists(fullFileName , 'file')
imshow(fullFileName);
end
Or else use patch() and do it on a computer graphics simulated bucket.
2 个评论
Image Analyst
2012-5-5
To see 1000 levels, at one row of pixels on your monitor, you'd need at least 1000 lines on your monitor. That doesn't leave much space for the rest of your GUI. But anyway, you can use patch. See my demo code in another Answer here.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!