如何通过 GUI 将项目添加到列表框
How to add items to a listbox via GUI
我拼命地尝试为我的 GUI 创建一个日志框。
我想做的是一开始,在按下 PUSH 按钮后在列表中写入文本。
PUSH Button的回调函数为:
function run__Callback(hObject, eventdata, handles)
initial_name=cellstr(get(handles.logbox1,'String'))
handles.names={'test','haus', 'top', 'down', 'optimistic'}
handles.names{end,end}=[] %Add Element for new text
handles.names{end,end}='neuuu' %Add Element
num_element=length(handles.names) %Count Elements
set(handles.logbox1,'String',handles.names) %Aktualisiere Liste
set(handles.logbox1,'Top',num_element) %Set Listbox to the last Element
和列表框在同一个 GUI 中。尽管如此,还是有错误:
使用 hg 时出错。uicontrol/set
The name 'Top' is not an accessible property for an instance of class 'uicontrol'.
谁能帮帮我,我不明白怎么了?
此致,约翰
您收到错误是因为 Top
不是 listbox uicontrol
的 property
;此外,Top
不是任何 uicontrol
.
的 属性
你可以找到here the list of uicontrol properties.
最接近"Top"的列表框属性是ListboxTop
。
我创建了两个简单的 GUI,可以帮助您管理对列表框的访问。
主 GUI "add_to_listbox" 包含:
- 一个
listbox
和 tag
listbox1
- a
pushbutton
with tag
pushbutton1, String
"Add Action": 每次用户按下时,在上面添加一个字符串如"Main GUI: Inserted string #x"列表框的("x" 是一个conter)
- a
pushbutton
with tag
"open_subgui", String
"Open SubGUI" 打开第二个GUI
SubGUI ("add_to_listbox_subgui") 包含
- a
pushbutton
with tag
pushbutton1, String
"Add Action on Main GUI": 每次用户按下时,在上面添加一个字符串如"SUB GUI Inserted string #x"主 GUI 列表框的("x" 是一个控件)
SubGUI 通过使用存储在主 GUI guidata
中的主 GUI listbox handle
处理向主 GUI 列表框添加字符串(当主 GUI 打开 SubGUI 时,它接收主 GUI 的 handle
作为输入;SubGUI 通过它访问主 GUI guidata
).
在下面你可以找到:
- 主 GUI
OpeningFcn
其中 "action counter" 已初始化
- 每次按下
pushbutton
时在列表框中添加一个字符串的主 GUI pushbutton1_Callback
- 主 GUI
open_subgui_Callback
打开 SubGUI
- SubGUI
OpeningFcn
,其中处理了 SubGUI 和 Main GUI guidata
- SubGUI
pushbutton1_Callback
每次按下 pushbutton
时都会在主 GUI 列表框中添加一个字符串
主 GUI OpeningFcn
% --- Executes just before add_to_listbox is made visible.
function add_to_listbox_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 add_to_listbox (see VARARGIN)
% Choose default command line output for add_to_listbox
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes add_to_listbox wait for user response (see UIRESUME)
% uiwait(handles.figure1);
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Get Main GUI guidata
gui_data=guidata(gcf);
% Add (and initialize) button action counter to Main GUI guidata
gui_data.btn_action=0;
% Set Main GUI guidata
guidata(gcf,gui_data);
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
主 GUI pushbutton1_Callback
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Add button action (from Main GUI) string to the listbox
%
% Get Mani GUI guidata
gui_data=guidata(gcf);
% Increment button action counter
gui_data.btn_action=gui_data.btn_action+1;
% Set Main GUI guidata (to store button action counter)
guidata(gcf,gui_data);
% Generate action string and add it to the listbox
% The firt strimg is directly add to the listbox
if(gui_data.btn_action == 1)
new_str='Main GUI: Inserted string #1';
set(handles.listbox1,'string',new_str);
else
new_str=['Main GUI: Inserted string #' num2str(gui_data.btn_action)];
% The fisrt string in the list box is returned as "string", to add the
% second one, it has has to be first converted into a cellarray
if(gui_data.btn_action == 2)
tmp_str=cellstr(get(handles.listbox1,'string'));
else
% The order of the string in the listbox is reversed to have the last
% one on top
tmp_str=flipud(get(handles.listbox1,'string'));
end
% Set the updated set of seting to the listbox
tmp_str{end+1,1}=new_str;
set(handles.listbox1,'string',flipud(tmp_str));
end
主 GUI open_subgui_Callback
% --- Executes on button press in open_subgui.
function open_subgui_Callback(hObject, eventdata, handles)
% hObject handle to open_subgui (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Open the Sub GUI; the handle of the Main GUI is passed as argument to
% This allows Sub GUI accessing to the Main GUI guidata
add_to_listbox_subgui(gcf)
% Disable the "Open Sub GUI" button
set(handles.open_subgui,'enable','off')
SubGUI OpeningFcn
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Add Sub GUI button action string to Main GUI listbox
%
% Get Sub GUI guidata
gui_data=guidata(gcf);
% Get Main GUI guidata, "gui_data.main_gui" holds the Main GUI handle
gui_data.main_gui_data=guidata(gui_data.main_gui);
% Increment the button action counter
gui_data.btn_action=gui_data.main_gui_data.btn_action+1;
% Update Main GUI button actin counter
main_gui_data=guidata(gui_data.main_gui);
main_gui_data.btn_action=gui_data.btn_action;
% Store Sub GUI guidata
guidata(gcf,gui_data);
% Store Main GUI guidata
guidata(gui_data.main_gui,main_gui_data);
%
% Add button action (from Main GUI) string to the listbox
%
if(gui_data.btn_action == 1)
% Generate action string and add it to the Main GUI listbox
% The firt strimg is directly add to the listbox
new_str='SUB GUI Inserted string #1';
set(gui_data.listbox,'string',new_str);
else
new_str=['SUB GUI Inserted string #' num2str(gui_data.btn_action)];
% The fisrt string in the list box is returned as "string", to add the
% second one, it has has to be first converted into a cellarray
if(gui_data.btn_action == 2)
tmp_str=cellstr(get(gui_data.listbox,'string'));
else
% The order of the string in the listbox is reversed to have the last
% one on top
tmp_str=flipud(get(gui_data.listbox,'string'));
end
% Set the updated set of seting to the listbox
tmp_str{end+1,1}=new_str;
set(gui_data.listbox,'string',flipud(tmp_str));
end
希望对您有所帮助。
我拼命地尝试为我的 GUI 创建一个日志框。 我想做的是一开始,在按下 PUSH 按钮后在列表中写入文本。 PUSH Button的回调函数为:
function run__Callback(hObject, eventdata, handles)
initial_name=cellstr(get(handles.logbox1,'String'))
handles.names={'test','haus', 'top', 'down', 'optimistic'}
handles.names{end,end}=[] %Add Element for new text
handles.names{end,end}='neuuu' %Add Element
num_element=length(handles.names) %Count Elements
set(handles.logbox1,'String',handles.names) %Aktualisiere Liste
set(handles.logbox1,'Top',num_element) %Set Listbox to the last Element
和列表框在同一个 GUI 中。尽管如此,还是有错误:
使用 hg 时出错。uicontrol/set
The name 'Top' is not an accessible property for an instance of class 'uicontrol'.
谁能帮帮我,我不明白怎么了?
此致,约翰
您收到错误是因为 Top
不是 listbox uicontrol
的 property
;此外,Top
不是任何 uicontrol
.
你可以找到here the list of uicontrol properties.
最接近"Top"的列表框属性是ListboxTop
。
我创建了两个简单的 GUI,可以帮助您管理对列表框的访问。
主 GUI "add_to_listbox" 包含:
- 一个
listbox
和tag
listbox1 - a
pushbutton
withtag
pushbutton1,String
"Add Action": 每次用户按下时,在上面添加一个字符串如"Main GUI: Inserted string #x"列表框的("x" 是一个conter) - a
pushbutton
withtag
"open_subgui",String
"Open SubGUI" 打开第二个GUI
SubGUI ("add_to_listbox_subgui") 包含
- a
pushbutton
withtag
pushbutton1,String
"Add Action on Main GUI": 每次用户按下时,在上面添加一个字符串如"SUB GUI Inserted string #x"主 GUI 列表框的("x" 是一个控件)
SubGUI 通过使用存储在主 GUI guidata
中的主 GUI listbox handle
处理向主 GUI 列表框添加字符串(当主 GUI 打开 SubGUI 时,它接收主 GUI 的 handle
作为输入;SubGUI 通过它访问主 GUI guidata
).
在下面你可以找到:
- 主 GUI
OpeningFcn
其中 "action counter" 已初始化 - 每次按下
pushbutton
时在列表框中添加一个字符串的主 GUIpushbutton1_Callback
- 主 GUI
open_subgui_Callback
打开 SubGUI - SubGUI
OpeningFcn
,其中处理了 SubGUI 和 Main GUIguidata
- SubGUI
pushbutton1_Callback
每次按下pushbutton
时都会在主 GUI 列表框中添加一个字符串
主 GUI OpeningFcn
% --- Executes just before add_to_listbox is made visible.
function add_to_listbox_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 add_to_listbox (see VARARGIN)
% Choose default command line output for add_to_listbox
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes add_to_listbox wait for user response (see UIRESUME)
% uiwait(handles.figure1);
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Get Main GUI guidata
gui_data=guidata(gcf);
% Add (and initialize) button action counter to Main GUI guidata
gui_data.btn_action=0;
% Set Main GUI guidata
guidata(gcf,gui_data);
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
主 GUI pushbutton1_Callback
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Add button action (from Main GUI) string to the listbox
%
% Get Mani GUI guidata
gui_data=guidata(gcf);
% Increment button action counter
gui_data.btn_action=gui_data.btn_action+1;
% Set Main GUI guidata (to store button action counter)
guidata(gcf,gui_data);
% Generate action string and add it to the listbox
% The firt strimg is directly add to the listbox
if(gui_data.btn_action == 1)
new_str='Main GUI: Inserted string #1';
set(handles.listbox1,'string',new_str);
else
new_str=['Main GUI: Inserted string #' num2str(gui_data.btn_action)];
% The fisrt string in the list box is returned as "string", to add the
% second one, it has has to be first converted into a cellarray
if(gui_data.btn_action == 2)
tmp_str=cellstr(get(handles.listbox1,'string'));
else
% The order of the string in the listbox is reversed to have the last
% one on top
tmp_str=flipud(get(handles.listbox1,'string'));
end
% Set the updated set of seting to the listbox
tmp_str{end+1,1}=new_str;
set(handles.listbox1,'string',flipud(tmp_str));
end
主 GUI open_subgui_Callback
% --- Executes on button press in open_subgui.
function open_subgui_Callback(hObject, eventdata, handles)
% hObject handle to open_subgui (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Open the Sub GUI; the handle of the Main GUI is passed as argument to
% This allows Sub GUI accessing to the Main GUI guidata
add_to_listbox_subgui(gcf)
% Disable the "Open Sub GUI" button
set(handles.open_subgui,'enable','off')
SubGUI OpeningFcn
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Add Sub GUI button action string to Main GUI listbox
%
% Get Sub GUI guidata
gui_data=guidata(gcf);
% Get Main GUI guidata, "gui_data.main_gui" holds the Main GUI handle
gui_data.main_gui_data=guidata(gui_data.main_gui);
% Increment the button action counter
gui_data.btn_action=gui_data.main_gui_data.btn_action+1;
% Update Main GUI button actin counter
main_gui_data=guidata(gui_data.main_gui);
main_gui_data.btn_action=gui_data.btn_action;
% Store Sub GUI guidata
guidata(gcf,gui_data);
% Store Main GUI guidata
guidata(gui_data.main_gui,main_gui_data);
%
% Add button action (from Main GUI) string to the listbox
%
if(gui_data.btn_action == 1)
% Generate action string and add it to the Main GUI listbox
% The firt strimg is directly add to the listbox
new_str='SUB GUI Inserted string #1';
set(gui_data.listbox,'string',new_str);
else
new_str=['SUB GUI Inserted string #' num2str(gui_data.btn_action)];
% The fisrt string in the list box is returned as "string", to add the
% second one, it has has to be first converted into a cellarray
if(gui_data.btn_action == 2)
tmp_str=cellstr(get(gui_data.listbox,'string'));
else
% The order of the string in the listbox is reversed to have the last
% one on top
tmp_str=flipud(get(gui_data.listbox,'string'));
end
% Set the updated set of seting to the listbox
tmp_str{end+1,1}=new_str;
set(gui_data.listbox,'string',flipud(tmp_str));
end
希望对您有所帮助。