在创建对象之前定义MATLAB GUI默认值

时间:2015-11-04 16:09:30

标签: matlab user-interface matlab-guide matlab-deployment appdata

我喜欢在创建GUI对象之前定义变量(例如assignin('base','Parametername',value);)。我无法立即在网上找到以下问题:

  • 一般问题1)什么决定了不同对象创建函数startfile=$1 for FILE in ./folder/*; do if ! [ "$FILE" '=' "$next.num" ] ; then perl -pi -e 's/"*.ext1"/"&.ext1"/g' ./file.txt ; perl -pi -e 's/"*.ext2"/"&.ext2"/g' ./file.txt ; let num="$FILE+1" echo $num > next.num else echo Skipping $FILE fi done 的执行顺序,还是它们都是并行的?

  • 一般问题2)Appdata在对象创建后运行。是否有在对象创建之前运行的函数?

  • 具体问题:我的目标是记住GUI的属性值。因此,在更改属性(例如通过回调)并关闭GUI之后,它应该在再次启动GUI后记住这些属性。如果是第一次启动GUI,或者所有appdata都已重置,则应使用默认值。

目前(它有效)我为每个_CreateFcn定义了这些属性值(参见示例代码),但对于20多个创建函数,它非常麻烦。是否可以在创建对象之前定义我的默认appdata,这样我就不需要那么多if循环了? (参见示例代码2)

示例代码1(当前情况):

OpeningFcn

示例代码2(提案):

_createFcn

1 个答案:

答案 0 :(得分:0)

对于您的具体问题,您可以1)在GUI关闭之前将会话数据保存到.mat文件中,并在下次启动GUI时加载它,或者2)将会话数据输出到工作区之前GUI关闭,并在下次启动GUI时将其作为参数传递给GUI函数。这是一个代码片段,它为一个名为test的非常简单的GUI实现了两个选项,这个GUI是通过GUIDE创建的,并且在其中有一个编辑文本框。

function test_OpeningFcn(hObject, eventdata, handles, varargin)
if ~isempty(varargin)
    set(handles.edit1, 'String', varargin{1})
elseif exist('sessiondata.mat','file')
    temp_data = load('sessiondata.mat','output');
    set(handles.edit1, 'String', temp_data.output) 
end
guidata(hObject, handles);
uiwait(handles.figure1);

function varargout = test_OutputFcn(hObject, eventdata, handles) 
output = get(handles.edit1, 'String');
varargout{1} = output;
save('sessiondata.mat', 'output')
delete(handles.figure1);

function figure1_CloseRequestFcn(hObject, eventdata, handles)
uiresume(hObject);

通常,当您单击X按钮关闭GUI时,将调用默认的CloseRequestFcn。默认版本只做一件事:杀死GUI。在上面的例子中,我们启用uiwait中的OpeningFcn以使程序等待用户响应(在这种情况下关闭GUI)。然后在CloseRequestFcn中,uiresume将GUI指向OutputFcnvarargout然后将数据传递给output = test(input) 并杀死GUI。

您可以通过两种方式使用GUI,无论是简单地运行它还是

sessiondata.mat

如果没有参数,编辑文本框中输入的内容将存储在.fig中,并在下次启动GUI时加载。如果为函数提供参数,它将使用此参数更改编辑文本框中的文本。输出参数将是关闭GUI之前编辑文本框中保留的任何文本。

回答一般问题1:这主要是我的猜测。我认为,如果您正在使用GUIDE,则由您创建对象的顺序决定。此信息存储在.m文件中。我正在猜测,因为GUIDE显然是跟踪对象创建,而且信息没有存储在CreateFcn文件中。

回答一般问题2:gui_mainfcnOpeningFcn的一部分,它应该是GUI创建过程中执行的第一个函数。虽然OpeningFcn在对象创建后运行,但它在GUI可用于用户交互之前执行,因此您可以在CreateFcn中设置GUI。您还可以尝试更改每个对象的CreateFcn,但是您必须在每个OpeningFcn中放置代码。所以,我认为data = data[,-4] 将是您设置GUI的更好地方。