I am desperately trying to create a logbox for my GUI. What i would like to do is for the start, to write text in a list after having pushed a PUSH Button. The Callback function of the PUSH Button is:
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
and the listbox is in the same GUI. Nevertheless, there is the error:
rror using hg.uicontrol/set
The name 'Top' is not an accessible property for an instance of class 'uicontrol'.
Can anyone help me please, i dont understand whats wrong?
Best regards, John
You've got the error because Top
is not a property
of the listbox uicontrol
; moreover, Top
is not a property of any uicontrol
.
You can find here the list of uicontrol properties.
The most listbox property close to "Top" is ListboxTop
.
I've created two simple GUIs that could help you managing the acccess to the listbox.
The Main GUI "add_to_listbox" contains:
listbox
with tag
listbox1pushbutton
with tag
pushbutton1, String
"Add Action": each time the user pushes it, a string such as "Main GUI: Inserted string #x" is added on top of listbox ("x" is a conter)pushbutton
with tag
"open_subgui", String
"Open SubGUI" to open the second GUIThe SubGUI ("add_to_listbox_subgui") contains
pushbutton
with tag
pushbutton1, String
"Add Action on Main GUI": each time the user pushes it, a string such as "SUB GUI Inserted string #x" is added on top of the Main GUI listbox ("x" is a conter)The SubGUI handles the addition of strings to the Main GUI listbox by using the Main GUi listbox handle
which is stored in the Main GUI guidata
(when the SubGUI is opened by the Main GUI, it receives as input the handle
to the Main GUI; through it the SubGUI access to the Main GUI guidata
).
In the following you can find the:
OpeningFcn
in which the "action counter" in initializedpushbutton1_Callback
that adds a string in the listbox each time the pushbutton
is pressedopen_subgui_Callback
which opens the SubGUIOpeningFcn
in which both SubGUI and Main GUI guidata
are handledpushbutton1_Callback
that adds a string in the Main GUI listbox each time the pushbutton
is pressedMain 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);
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Main 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
Main 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
Hope this helps.