how to resolve the 'dot indexing not supported for this type of variable' error when creating GUIs with GUIDE?

I am writing a code where I hit a pushbutton, it shows me a error saying "Dot indexing is not supported for variables of this type". And this error is for the line 268-- set(handles.edit6,'string',fullname); fullname is basically the filepath and filename combined together.
Any kind of help will be appreciated. Thank you.

20 Comments

I got the same error. Might it have something to do with the version I'm using? (R2018a)
Nothing to do with the version of matlab. It's a bug in your code where handles is not what it is supposed to be. It's supposed to be a structure but it is not.
it is 100% blamed on the version because I have the same error while never occurred previously when I run the GUI hundreds of times on 2017b version. Another reason to go to NI products and stop embarrassing ourselves with this!
By far, the most likely reason for this type of error is a bug in your code. A change of version may make the bug more evident but the bug was already there and probably would have occured at some point. In any case, without any actual code to look at, we can only conjecture.
Using that as an excuse to switch to a different product is, in my opinion, very foolish. Being very familiar with both products, they have completely different strengths and weaknesses. In terms of reliability, my experience is that matlab wins hands down.
Code from 2015 ran fine and gives this error on 2018 matlab so it is 100% something changed in matlab. That's OK it's very common but let's just not deny facts here.
@Andy, I'm not sure what your point is. Yes, bugs are introduced in new versions (and old ones are fixed). There is nothing unique to matlab here.
On the topic at hand, the error "Dot indexing is not supported for variables of this type" thrown from set(handles.edit6,'string',fullname) is clearly due to the fact that the handles variable is not of a type that support dot indexing. handles is normally a structure and nothing has changed in matlab in that regard. Here it clearly is not and the most likely reason is a bug in a callback where it does not write the handle properly. That buggy callback would be the OP own code. What may have changed with the version of matlab is the order in which the callbacks are executed, thus triggering a bug that was laying dormant.
But again, without any actual code to look at, we can only conjecture. So until some code is posted that demonstrates the problem, I don't see any point in continuing this discussion.
I also experienced the same error for a struct that I created using the 'struct' function and then passing it to another function that assigns values to its fields.
Note that MATLAB R2015b changed the behavior when assigning fields to non-structure variables: previously this was allowed (with a warning) and the variable was implicitly converted to a structure, whereas from R2015b+ this throws an error:
The solution is to ensure that the object that should be a structure really is a structure.
Hey guys I have attached the complete code. Thanks.
Tell us the exact steps to do to reproduce the error. Because when I ran it with a .wav file, this line of code ran fine:
set(handles.edit6,'string',fullname);
  1. First you browse the wav file and hit train button. Then two graphs will be generated.
  2. Then hit the "back" button and the trainpage.fig will be opened.
  3. Hit the train new user button again it will open the multiply.fig.
  4. Try to read the wav file again. It does not plot the graph this time.
What version of matlab are you using?
I'm using R2018a. There is no listbox of audio files on your GUI, and even worse, there is not even a browse button on your GUI. How are your users supposed to indicate the audio file? How are you browsing to find the wave file? Plus, I do not even see a "back" button
We are also missing multiply1.fig and SRS01_GUI_MAINPAGE.fig and possibly functions referenced by them.
the browse button is on multiply.fig.. when you hit it you should be able to browse through your pc to find the wav.files.. I hav attached the main page .fig and.m files..
Even I am using Matlab 2018a version and it is showing me the error mentioned in the question.
Hey all I am using 2018a same error. But when i run gui through editor it works fine. and when i try to run from figure then error comes
if you try in the CreateFcn of one GUI element to set a value of another GUI element, why it will not work? Maybe, because the other GUI element has not yet ben created. Go to Callback
The handles structure is not initialized until after all CreateFcn of the saved figure have run.
The order of CreateFcn being run is not well defined for nested objects. For example if you have an axes object within a figure object, then is the CreateFcn for the figure run immediately before the axes is created, or are the CreateFcn run in a "depth-first" strategy, or are all of the objects being loaded created first and then all of the CreateFcn are run? This is not documented.
But we can say for sure that the handles structure is not created at the time the figure is loaded. The handles structure is created afterwards by the GUIDE initialization code. The handles structure is not part of the MATLAB graphics object structure: it is a convenience layer that has been added-on by GUIDE.
function Detection_lines_width()
image=imread('Vegetables.png');
A= rgb2gray(image);
rotA =imrotate(A,0,'crop');
figure;
xy=[];
for l=1:length(lines)
if eq(lines(l).point1(1),lines(l).point2(1))
dist=abs(lines(l).point1(2)-lines(l).point2(2));
else
dist=abs(lines(l).point1(l)-lines(l).point(1));
end
if dist>len
xy=[xy,lines(l)];
end
end
for k=1:length(xy)-1
if eq(xy(k).point1(1),xy(k+1).point1(1)) || eq(xy(k).point2(1),xy(k+1).point2(1))
if(xy(k).point1(2)<xy(k+1).point1(2))
rect=[xy(k).point1(1) xy(k).point1(2) abs(xy(k).point1(1)-xy(k).point2(1)) abs(xy(k).point1(2)-xy(k+1).point1(2)) ];
else
rect=[xy(k+1).point1(1) xy(k+1).point1(2) abs(xy(k).point1(1)-xy(k).point2(1)) abs(xy(k).point1(2)-xy(k+1).point1(2)) ];
end
elseif eq(xy(k).point1(2),xy(k+1).point1(2)) || eq(xy(k).point2(2),xy(k+1).point2(2))
if xy(k).point1(1)<xy(k+1).point1(1)
rect=[xy(k).point2(1) xy(k).point2(2) abs (xy(k).point1(2)-xy(k).point2(2)) abs (xy(k).point1(1)-xy(k+1).point1(1))];
else
rect=[xy(k+1).point2(1) xy(k+1).point2(2) abs (xy(k).point1(2)-xy(k).point2(2)) abs (xy(k).point1(1)-xy(k+1).point1(1))];
end
end
end
if rect(4)>width
rectangle('position',rect,'Linewidth',2,'EdgeColor','r')
end
end
This is my code and i am getting an error saying Dot indexing is not supported for variables of this type.

Sign in to comment.

 Accepted Answer

You used GUIDE to construct these GUIs.
When you use GUIDE, then the "handles" structure that is passed into your function always refers to information stored against the figure that the graphic element is in. "handles" is not a global structure, it is a per-GUI structure, and you have constructed three separate GUI.
You need to change
set(handles.edit6,'string',fullname);
to
edit6 = findobj(0, 'tag', 'edit6');
set(edit6, 'string', fullname);

10 Comments

I tried replacing the code and the problem was solved. Now, there is one more line which is showing the same error i.e. dot indexing is not supported for this type of variable.
line 277: fullname = get(handles.edit6, 'string');
I have uploaded the updated m code file.
In SRS01_GUI_TrainPage.m you have
open('multiply1.fig')
Remember that when you open() a .fig, that does not run the .m with the same name. You need to call multiply1 to get it to initialize its data structures properly.
You changed one reference to handles.edit6 to findobj() and so on, but that was in pushbutton7_Callback . You also need to make the same change to button_Callback
I recommend you recheck the code of pushbutton3_Callback as it will try to use untitled.fig
you are right. when i am trying to open('multiply1.fig') it is not reading the .m file properly. what is the other way i can call the multiply1 file in trainpage.m file? the dot indexing error has been solved completely!! thanks!
this does not open the .fig file. Instead this opens the .m file of multiply1
If multiply1 was constructed by GUIDE, then it will have internal code that does openfig() on the .fig of the same name as the function. This is hidden inside the gui_mainfcn() call.
Thanks man. your solution really worked. Thank you so much.
Warning: Error executing a listener callback for the event ButtonExited defined for class matlab.graphics.primitive.canvas:
Error using getDatetimeSettings
The default value of the property 'MonthsOfYear' in class 'datetime' is invalid:
Variables of this type do not support indexing with points.
What is the reason for this error in the drawing, please answer thank uu!!!!
I think we are going to need your code -- and your .fig too if you used GUIDE. You can attach them.
... though I suspect that you might have some third-party code that is interfering with MATLAB.

Sign in to comment.

More Answers (11)

You get this error when you open GUI straight from the .fig directly. Do not do so, instead from the .m script opened at the editor, click the run button to open the GUI. That is the magic!

1 Comment

This is not quite accurate for what was happening for the user. They were using multiple GUIDE-created GUIs, not realizing that the handles structure managed by GUIDE is always relative to the figure (there is no global one for all of the GUIs together.)
They were also specifically using open_fig() on the extra GUIs rather than executing the GUIs. This has the same underlying issue as you refer to, that this does not execute the initialization code for that GUI. However, the solution for them is not to go to the editor and click the Run button, as they were opening the extra GUIs under program control, so they needed to execute the sub-GUIs by name (to cause their initialization to be run) instead of just lauching the figure.

Sign in to comment.

Set an error breakpoint and run your code. If this problem occurs again, MATLAB will enter debug mode where the error occurs. Examine the variables on that line. If the error occurs on the line 268 that you quoted ( set(handles.edit6,'string',fullname) ) I'm almost certain that the problem is what Guillaume suggested, that handles is not a struct array as you expected it to be.

1 Comment

You have not given us the source for some of the functions. You have not given us the code that sets local. You have not given us the external functions you invoke. You have not told us the exact line the problem occurs on. You have barely commented the code.
We are not going to be able to debug this for you.

Sign in to comment.

filename = 'users/anudeep/desktop/a11.txt';
delimiterIn = ' ';
headerlinesIn = 1;
A = importdata(filename,delimiterIn,headerlinesIn);
for k = [3:5]
disp(A.colheaders{1, k})
disp(A.data(:, k))
disp(' ')
end
I am getting an error "Dot indexing is not supported for variables of this type".
I got a similar error of Dot indexing. But unable to find loop where the error exists :( I have attached a pic that tells about the error when I try to initial voltage for a capacitor in simscape using simulink.
Any guess or guideline to correct this error can be helpful. Thanks in advance.

3 Comments

Please paste in all the contents of the callback function. We need to see it.
Chances are you're trying to access a field of a structure, table, or class object when MATLAB thinks the variable is not a structure, table, or class object.
Thanks Image Analyst.
For close_system(gcb), I don't get any results in command window.
For power_initstates(bdroot(gcb),gcb), I get the following-
Dot indexing is not supported for variables of this
type.
Error in power_initstates_pr
Error in power_initstates_pr
Error in power_initstates (line 28)
power_initstates_pr(varargin{:});
Error while evaluating UIControl Callback.
Thanks
It looks to me as if you are using Simulink, possibly SimScape Electrical (formerly SimPowerSystems). The error appears to be happening somewhere while executing the MaskDialog callback of powergui . The line with the error appears to be within a .p file or similar. I cannot tell what is happening. It might be a bug.

Sign in to comment.

That´s the code:
rto = get_param('temperatura_pid/Gain1', 'RuntimeObject');
str = num2str(rto.OutputPort(1).Data);
statestxt =findobj('Tag', 'Resultado');
set(statestxt, 'string', str);
n=str2num(get(statestxt, 'String'));
That´s the error:
Dot indexing is not supported for variables of this type.
Error in interfaz_temp>Visualizar_Callback (line 135)
str = num2str(rto.OutputPort(1).Data);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in interfaz_temp (line 42)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)interfaz_temp('Visualizar_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback.
I don´t know what is wrong, thanks for your help.

8 Comments

For whatever reason, rto.OutputPort is not a struct or object at that point. For example it might be []
But I need to use that line of code to collect output port data from Simulink model to GUI
Use the debugger to put a breakpoint at that line of code Visualizar_Callback (line 135). Examine the class() of rto.OutputPort and size() of it.
The problem is that variable rto = get_param('temperatura_pid/Gain1', 'RuntimeObject'); is empty, as if get_param didn't read the gain in simulink.
I've tried to solve it but I dont know what is wrong
Is the simulation paused at the time you ask for the RunTime object?
RunTime objects are not for reading out the "final" value of an object; they are only for use while the object is running. If you need the final version, use ToWorkspace or similar.
And what kind ok block can I change for the constant in order to the simulation never stops?

Sign in to comment.

Hello, I'm new to matlab. I need your help for my homework.
I get the error for when I run it through the GUI. I did not receive an error when I run it through the editor.
error: Dot indexing is not supported for variables of this type.
Error in untitled> pushbutton1_Callback (line 93) axes (handles.axes1); Error in gui_mainfcn (line 95) feval (vararg the {}); Error in untitled (line 42) gui_mainfcn (gui_State, varargin {:});
Can you help for the solution
Thank you

1 Comment

My code on line 42: gui_mainfcn (gui_State, varargin {:}); My code on line 93: axes (handles.axes1); and My code on line 95: feval (vararg the {});

Sign in to comment.

Also make sure that the model like simulink model being called from that function is not opened in another directory. this was the main problem for me, in order to make sure that the model is closed
type
close_system('modelname')
if it ask for saving
save_system('modelname')
if this going to happen too many times just embeed this code in the section of the code for closing the GUI.
i got a Dot indexing is not supported for variables of this type.
Error in (line 163)
image = ptcloud.Location;
Error in ()
I = helperPointCloudToImage(Location);
as well for this code: (goal is to increase pointCloud resolution to be at minimum 64, 1856, 5 at the end)
EDIT: copyright code removed.
Hello, I am a begineer on Matlab. Recently, I download an open-source tool to deal with some data. The Link is here:
While I was using the ' Rough Crop' function, the error is always ' Dot indexing is not supported for variables of this type'.
I attach the Code and some pics here.
Any help or tips are really helpful to me. I really appreciate it.
Thank you!

2 Comments

Looking at the tutorial briefly, it appears that tool requires MS Windows with Excel installed ? We would probably also need an example data file to test with.
Yeah, sure. I attach an example data document here.
Thank you so much, Walter.

Sign in to comment.

i am new to matlab, what should i write code for callback in 'app designer'

1 Comment

You have not defined what you want the App Designer callback to do
These days you would generally configure your model for Single Simulation Output https://www.mathworks.com/help/simulink/gui/single-simulation-output.html and you would invoke sim() to run the model, and then extract the appropriate information from the simulation output object. See for example https://www.mathworks.com/help/simulink/slref/sim.html?searchHighlight=sim%20&s_tid=srchtitle_sim%20_1#bvgu1qs

Sign in to comment.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!