所以我指導,看起來像這樣創建GUI:傳遞從單選按鈕值到腳本在Matlab
我想從單選按鈕來訪問數據,然後改變我的模擬變量(比特率和調製是按鈕組,改進是單個單選按鈕)。例如 - 在模擬中,我有一個變量Rs=1e9
,所以當選擇1Gbps按鈕時,我希望它保持1e9,但是如果選擇10Gbps按鈕,我希望它將其值更改爲10e9。
然後在點擊開始按鈕之後,我想用給定的參數開始我的仿真(在不同的.m文件中)。 我該怎麼辦?(我知道matlab中的句柄思想,但我不知道如何將值傳遞給模擬)
這是控制gui的代碼 - 由指南生成。我添加了一些開始模擬並關閉gui窗口的代碼。
function varargout = gui_final(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @gui_final_OpeningFcn, ...
'gui_OutputFcn', @gui_final_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 gui_final is made visible.
function gui_final_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 unrecognized PropertyName/PropertyValue pairs from the
% command line (see VARARGIN)
% Choose default command line output for gui_final
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes gui_final wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = gui_final_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 start.
function start_Callback(hObject, eventdata, handles)
% hObject handle to start (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
clc
close all
message = sprintf('Wait - this is a very long simulation!\nClick the OK button and wait');
uiwait(msgbox(message));
evalin('base', 'simulation');
% --- Executes on button press in dfe.
function dfe_Callback(hObject, eventdata, handles)
% hObject handle to dfe (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of dfe
% --- Executes on button press in ook.
function ook_Callback(hObject, eventdata, handles)
% hObject handle to ook (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of ook
很抱歉,但我還是不明白如何將這些數據傳遞給與模擬的腳本。 – dawzaw
好的。我忘了寫我的腳本不是一個函數。所以我把它轉換成一個函數。但是使用你的代碼,我得到另一個錯誤:'switch get(get(handles.Bitrate,'SelectedObject'),'Tag') case'onegbps',bitrate = 1e9; case'tengbps',bitrate = 10e9; 結束 message = sprintf('等待 - 這是一個非常長的模擬!\ n單擊確定按鈕並等待'); uiwait(msgbox(message)); evalin('base','simulation(bitrate,modulation,true)');'。錯誤:'錯誤使用evalin 未定義的函數或變量 'bitrate'.' – dawzaw
好吧,我糾正你的答案 - evalin(' 基地」,[ '模擬(' num2str(比特率) ')']) – dawzaw