我喜欢在创建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
答案 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指向OutputFcn
,varargout
然后将数据传递给output = test(input)
并杀死GUI。
您可以通过两种方式使用GUI,无论是简单地运行它还是
sessiondata.mat
如果没有参数,编辑文本框中输入的内容将存储在.fig
中,并在下次启动GUI时加载。如果为函数提供参数,它将使用此参数更改编辑文本框中的文本。输出参数将是关闭GUI之前编辑文本框中保留的任何文本。
回答一般问题1:这主要是我的猜测。我认为,如果您正在使用GUIDE,则由您创建对象的顺序决定。此信息存储在.m
文件中。我正在猜测,因为GUIDE显然是跟踪对象创建,而且信息没有存储在CreateFcn
文件中。
回答一般问题2:gui_mainfcn
是OpeningFcn
的一部分,它应该是GUI创建过程中执行的第一个函数。虽然OpeningFcn
在对象创建后运行,但它在GUI可用于用户交互之前执行,因此您可以在CreateFcn
中设置GUI。您还可以尝试更改每个对象的CreateFcn
,但是您必须在每个OpeningFcn
中放置代码。所以,我认为data = data[,-4]
将是您设置GUI的更好地方。