Generating an unknown ammount of Buttons in App Designer

23 visualizaciones (últimos 30 días)
Ahmet Sahin
Ahmet Sahin el 26 de Ag. de 2019
Comentada: Myles el 21 de Abr. de 2024
Hello,
I'm trying to generate Buttons programmatically with the App Designer.
I have an Excel File, where all the names of the Buttons are listet, not knowing how many Buttons (or lines in Excel) will be needed.
I figured out how to create components with the App Designer programmtically:
So I tried many things, but none of them worked.
The problem is, that (as far as I understood) every Button (or other element) in the GUI needs his own variable. So I have to create new variables with the function eval, wich is, how I found out on every site here, absoulutly forbidden...
My first thought was to create an Array, but it didn't work:
Unable to perform assignment because dot indexing is not supported for variables of this type.
And heres the Code:
A = [378 700 100 22]; %Position of the Button
allKeys = string(keys(CellContOne)); %allKeys gets all the Buttonnames as a String
UniButton = zeros(length(allKeys)); %An Array with the length of the List is created
for i = 1:length(allKeys) %For Loop to create the Buttons
UniButton(i) = uibutton(app.UIFigure, 'state'); %Creating a Button
UniButton(i).Position = A; %Giving the Button a position
UniButton(i).Text = allKeys(i); %Giving the Button it's Text
b_text = UniButton(i).Text; %global Variable gets the Text
b_value = UniButton(i).Value; %global Variable gets the Value
UniButton(i).ValueChangedFcn = @app.mybuttonpress; %Callback function
A(2) = A(2) -25; %Position change for the next Button
end
I also tried using just one variable for every Button, but it didn't work because the GUI wasn't able to figure out wich button was pressed (I need this information for the callback) The code looks the same, just without the index (i) and the line UniButton = zeros(length(allKeys));
Structures and Cell Arrays also didn't work for me.
I hope You can help me!
  1 comentario
Myles
Myles el 21 de Abr. de 2024
Annoyingly enough, im having a similar problem, but Button_ always comes up as being an unrecognized property, so it doesn't seem to work.

Iniciar sesión para comentar.

Respuesta aceptada

xi
xi el 26 de Ag. de 2019
You need to remove the line:
UniButton = zeros(length(allKeys));
In the callback function, you can retreive source.Text to determine which button is pressed and source.Value to determine the state of the pressed button:
function mybuttonpress(app,source,event)
source.Value
source.Text
end
  1 comentario
Ahmet Sahin
Ahmet Sahin el 26 de Ag. de 2019
Hi Xi,
thank You for Your help. I also didn't know about the source.___ thing, that also really helped me out.
Thank You!

Iniciar sesión para comentar.

Más respuestas (1)

Dennis
Dennis el 26 de Ag. de 2019
Hi,
your code should almost work, you need to remove the preallocation with zeros. You can let your loop run backwards instead:
A = [378 700 100 22]; %Position of the Button
allKeys = string(keys(CellContOne)); %allKeys gets all the Buttonnames as a String
for i = length(allKeys):-1:1 %For Loop to create the Buttons
UniButton(i) = uibutton(app.UIFigure, 'state'); %Creating a Button
UniButton(i).Position = A; %Giving the Button a position
UniButton(i).Text = allKeys(i); %Giving the Button it's Text
b_text = UniButton(i).Text; %global Variable gets the Text
b_value = UniButton(i).Value; %global Variable gets the Value
UniButton(i).ValueChangedFcn = @app.mybuttonpress; %Callback function
A(2) = A(2) -25; %Position change for the next Button
end
  2 comentarios
Ahmet Sahin
Ahmet Sahin el 26 de Ag. de 2019
Hi Dennis,
thank you very much, now everything works fine!
Namita Gera
Namita Gera el 6 de Abr. de 2022
I am struggling with the callback function on buttons and was hoping you could help.
I am creating a game in matlab app designer in which a player plays against the computer opponent. I want to code the CPU to press a button at random when it is its turn. For example, in TicTacToe the player plays against another player but in this case, the opponent is the CPU. The CPU is able to click buttons at random for example if there are 9 buttons it will press on any of those 9 randomly providing it has not been pressed already. I am not sure how to program this any help would be highly appreciated.
This is what i have so far
if app.pl_move == 2
n = randi(9)
app.Button_(n).Text = "X";
app.Button_(n).Enable = "off";
app.pl_move = 1;
end

Iniciar sesión para comentar.

Categorías

Más información sobre Develop Apps Using App Designer en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by