我很难让滑块表现为进度条。 我有两个按钮。一个接受来自文本编辑器(用户输入)的起始值,另一个接受循环的进度。 然后我有一个滑块,我试图移动,因为功能循环改变了' 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等...而不是通过函数调用传递输入/输出]
请告诉我。
答案 0 :(得分:0)
对于第一种情况,您需要修改您的函数myfile
。在while循环之前,您需要设置滑块的最小值和最大值。这将允许您使用i作为您的价值。
set(handles.sl,'Min',1,'Max',10000);
要允许滑块更新,您需要在循环中添加refresh
和drawnow
。如果不使用这些,Matlab将等待直到代码结束时绘制ui更改。您的循环应如下所示:
while(i < 10000)
clc
i = i + 1;
waitbar(i/10000,h)
set(handles.sl,'value',i/10000);
refresh;
drawnow;
end
从个人经验来看,第二种情况可能会因大型应用程序而变得混乱。如果您需要使用多个文件,我建议使用面向对象编程创建您的应用程序。您可以在创建的对象中存储ui句柄,这样可以使代码保持井井有条,并且可以更轻松地来回传递句柄。