如何使ListBox在matlab中持久化

How to make ListBox persistent in matlab

我正在用 matlab 开发一个 GUI,它有一个列表框。我计划使用一些输入参数调用 GUI 函数,其中一个参数要添加到列表框中。由于 gui 中的默认列表框不是持久的,因此每次当我使用输入参数调用 gui 函数时,列表框中的内容都会被覆盖。我试图找到一种方法来将列表框声明为持久的。下面是我用来在列表框中添加项目的代码。

names = get (handles.plotLB, 'string') ;
set (handles.plotLB,'string',{varargin{1},names{:}}) ;

定义一组 "persistent" 列表框项目有多种可能性。

最简单的方法是在创建 GUI 本身时定义默认列表:

  • 双击 GUIDE 面板中的列表框打开检查器
  • select String 属性
  • 单击该图标,打开项目编辑器,您可以在其中编写默认项目

然后您可以通过在 GUI OpeningFcn

中添加以下内容,将您作为输入提供的项目添加到这些默认项目中
handles.output = hObject;
handles.listbox1.String=[varargin{1},handles.listbox1.String{:}]
% Update handles structure
guidata(hObject, handles);

另一种可能性是在 OpeningFcn 中定义默认列表,然后添加作为输入提供的列表:

handles.output = hObject;
in_list={'default_item_1' 'default_item_2' 'default_item_3'}
handles.listbox1.String=[varargin{1},in_list]
% Update handles structure
guidata(hObject, handles);

您还可以创建一个 configuration 文件来定义默认列表;在这种情况下,您可以在 OpeningFcn 中阅读它,然后添加作为输入提供的一个:

handles.output = hObject;
if(exist('save_listbox_string_config.txt'))
   fp=fopen('save_listbox_string_config.txt')
   C=textscan(fp,'%s');
   fclose(fp);
   handles.listbox1.String=[C{1}(1:end);varargin{1}']
end
% Update handles structure
guidata(hObject, handles);

此解决方案允许您通过添加/删除项目轻松管理默认列表。

此外,使用 configuration 文件方法,您可以在关闭 GUI 时保存列表框项目。

为此,您必须在 CloseRequestFcn 中添加以下内容:

fp=fopen('save_listbox_string_config.txt','wt')
C=handles.listbox1.String
for i=1:size(C)
   fprintf(fp,'%s\n',char(C(i)))
end
fclose(fp);

为了使 GUI 更灵活,您可以添加一个控件(例如 menu itemcheckbox),允许用户 select 是否保存列表配置文件。