将滑块设置为matlab GUIDE中的进度条

时间:2016-02-15 23:46:59

标签: matlab matlab-figure matlab-guide

我很难让滑块表现为进度条。 我有两个按钮。一个接受来自文本编辑器(用户输入)的起始值,另一个接受循环的进度。 然后我有一个滑块,我试图移动,因为功能循环改变了' i'值(沿着/显示进度更新)。

这是我的代码。

function varargout = myfig(varargin)

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @myfig_OpeningFcn, ...
                   'gui_OutputFcn',  @myfig_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before myfig is made visible.
function myfig_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to myfig (see VARARGIN)

% Choose default command line output for myfig
handles.output = hObject;
handles.min = get(handles.ed,'value');
handles.max = 10000;
handles.i = 0;
% Update handles structure
guidata(hObject, handles);

% UIWAIT makes myfig wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = myfig_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pb.
function pb_Callback(hObject, eventdata, handles)
% hObject    handle to pb (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
value = str2double(get(handles.ed,'string'));
value
assignin('base','value',value)


% --- Executes on slider movement.
function sl_Callback(hObject, eventdata, handles)
% hObject    handle to sl (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
set(handles.sl,'Max',handles.max);
set(handles.sl,'min',handles.min);
set(handles.sl,'value',handles.i);


% --- Executes during object creation, after setting all properties.
function sl_CreateFcn(hObject, eventdata, handles)
% hObject    handle to sl (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end



function ed_Callback(hObject, eventdata, handles)
% hObject    handle to ed (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of ed as text
%        str2double(get(hObject,'String')) returns contents of ed as a double



% --- Executes during object creation, after setting all properties.
function ed_CreateFcn(hObject, eventdata, handles)
% hObject    handle to ed (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pbs.
function pbs_Callback(hObject, eventdata, handles)
% hObject    handle to pbs (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 myfile;


function [] = myfile(handles)
%MYFILE Summary of this function goes here
%   Detailed explanation goes here
% prompt('Please enter a valid number to start');
h = waitbar(0,'Processing...');
% i = input('Please enter a valid number to start');
i = evalin('base','value');
while(i < 10000)
    clc
    i = i + 1;
    waitbar(i/10000,h)
     handles.i = i;
     set(handles.sl,'value',i/10000);
     guidata(hObject,handles);
end
close(h);

Matlab文章:2014b

首先:我想学习当函数嵌套在GUI文件中时如何处理它。

第二:如果将函数移动到另一个.m文件中。[使用set / get / guidata等...而不是通过函数调用传递输入/输出]

请告诉我。

1 个答案:

答案 0 :(得分:0)

对于第一种情况,您需要修改您的函数myfile。在while循环之前,您需要设置滑块的最小值和最大值。这将允许您使用i作为您的价值。

set(handles.sl,'Min',1,'Max',10000);

要允许滑块更新,您需要在循环中添加refreshdrawnow。如果不使用这些,Matlab将等待直到代码结束时绘制ui更改。您的循环应如下所示:

while(i < 10000) clc i = i + 1; waitbar(i/10000,h) set(handles.sl,'value',i/10000); refresh; drawnow; end

从个人经验来看,第二种情况可能会因大型应用程序而变得混乱。如果您需要使用多个文件,我建议使用面向对象编程创建您的应用程序。您可以在创建的对象中存储ui句柄,这样可以使代码保持井井有条,并且可以更轻松地来回传递句柄。