Question: 1st i tried working in a program that generates random pokemon so we can create teams to play in showdown. It looked like this import tkinter as tk from tkinter import * import random import pypokedex root = tk.Tk() #main #1ra página inicio = Frame(root) inicio.grid(row=0, column=0) ttl = Label(inicio, text="¿Quienes juegan?") quienes_juegan = StringVar() txt1 = Entry(inicio, textvariable = quienes_juegan, width=50) #quienes juegan btn1 = Button(inicio, text="Confirmar", command= lambda: accion()) #avanza y tira los pokes #colocando los botones ttl.grid(padx=650) txt1.grid(pady=20) btn1.grid() elecciones = Frame(root) elecciones.grid(row=0, column=0) jugadores = [] def accion(): #pa avanzar de pagina quienes_juegan_geteado = quienes_juegan.get() variablesss = quienes_juegan_geteado.split() jugadores.extend(variablesss) print(jugadores) elecciones.tkraise() botoncitos(elecciones,pokimones) #Numero de pokimons numero_pokimons = 30 #Quieres legendarios? si = Tru ; no = False legendarios = False #Magia legendary_list = [144,145,146,150,151,243,244,245,249,250,251,377,378,379,380,381,382,383,384,385,386,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,638,639,640,641,642,643,644,645,646,647,648,649,716,717,718,719,720,721,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809] pokimones = [] while numero_pokimons != 0: poke = random.randint(1,809) if poke in pokimones: continue #iteracion para legendarios if legendarios == True: if poke in legendary_list : pokimones.append(poke) numero_pokimons = numero_pokimons-1 else: continue #iteracion para no legendarios elif legendarios == False: if poke in legendary_list: continue else: pokimones.append(poke) numero_pokimons = numero_pokimons-1 #ordenamos de mayor a menor los pokimons para que se vea mas bonito pokimones = sorted(pokimones) #Imprime los pokimons con su nombre #'interfaz' if legendarios == True: conf_lege = 'SI' else: conf_lege = 'NO' elegibles = [pypokedex.get(dex=dex_number) for dex_number in pokimones] def botoncitos(elecciones, pokimones): def crear_boton(index): def seleccionar_pokemon(): button.config(state=DISABLED) button = Button(elecciones, text=item, command=seleccionar_pokemon) button.grid(sticky="nsew", row = index // 6, column = index % 6 ) for index, item in enumerate(elegibles): crear_boton(index) inicio.tkraise() root.geometry("1400x250") root.mainloop()  this one worked, it made 30 buttons in rows of 6 with each pokemon generated I tried to order everything in functions so the code could work when i had to modify some variables, like instead of creating just 30 pokemon numbers, it created 6 per user import tkinter as tk from tkinter import * import random import pypokedex root = tk.Tk() #main jugadores = [] #players cantidad_jugadores = len(jugadores) #number of players pokimones = [] #list of pokemon numbers generated by generar_pokimons elegibles = [pypokedex.get(dex=dex_number) for dex_number in pokimones] #transforms the numbers generated into pokemon names def accion(): #command that turns to elecciones, the second page quienes_juegan_geteado = quienes_juegan.get() #gets the entry variablesss = quienes_juegan_geteado.split() #splits the entry jugadores.extend(variablesss) #extends it to the players list in the global variable print(jugadores) #just to test if it works generar_pokimones() #generate the pokemon numbers botoncitos(elecciones,pokimones) elecciones.tkraise() def botoncitos(elecciones, pokimones): #creates 1 button per pokemon generated and places them in a grid of 6 def crear_boton(index): def seleccionar_pokemon(): button.config(state=DISABLED) button = Button(elecciones, text=item, command=seleccionar_pokemon) button.grid(sticky="nsew", row = index // 6, column = index % 6 ) for index, item in enumerate(elegibles): crear_boton(index) def generar_pokimones(): pokemones= [] numero_pokimons = cantidad_jugadores * 6 #number of pokemons determined by the number of players #if you want to play with legendary pokemons legendarios = False legendary_list = [144,145,146,150,151,243,244,245,249,250,251,377,378,379,380,381,382,383,384,385,386,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,638,639,640,641,642,643,644,645,646,647,648,649,716,717,718,719,720,721,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809] #loop while numero_pokimons != 0: poke = random.randint(1,809) if poke in pokemones: continue if legendarios == True: if poke in legendary_list : pokemones.append(poke) numero_pokimons = numero_pokimons-1 else: continue elif legendarios == False: if poke in legendary_list: continue else: pokemones.append(poke) numero_pokimons = numero_pokimons-1 pokemones = sorted(pokemones)#sort pokimones.extend(pokemones) #adds the list to the global variable pokimones #1st page inicio = Frame(root) inicio.grid(row=0, column=0) ttl = Label(inicio, text="¿Quienes juegan?") quienes_juegan = StringVar() txt1 = Entry(inicio, textvariable = quienes_juegan, width=50) #who plays? btn1 = Button(inicio, text="Confirmar", command= lambda: accion()) #turns to the 2nd page, elecciones ttl.grid(padx=650) txt1.grid(pady=20) btn1.grid() elecciones = Frame(root) #the second page, where it displays 6 buttons with pokemon per user elecciones.grid(row=0, column=0) inicio.tkraise() root.geometry("1400x250") root.mainloop()  but now when i run this code and click button 1, it just stops, it seems that it doesnt gets the list of numbers so it can generate the buttons. in accion(), i tried printing the list after its supposed to generate and it comes out blank apologies for grammar, english its not my first language

Answer: Note that cantidad_jugadores is zero because it is set by the line: cantidad_jugadores = len(jugadores)  As jugadores is an empty list when the above line is executed. So the code block inside the while loop inside generar_pokimones() will not be executed because numero_pokimons (which is calculated from the value of cantidad_jugadores) is zero. You need to get the size of jugadores inside generar_pokimones() instead: ... def generar_pokimones(): pokkemones = [] numero_pokimons = len(jugadores) * 6 # get the size of jugadores here ... ...  Similar issue on elegibles. You need to create elegibles inside botoncitos() instead: def botoncitos(elecciones, pokimones): #creates 1 button per pokemon generated and places them in a grid of 6 def crear_boton(index): def seleccionar_pokemon(): button.config(state=DISABLED) button = Button(elecciones, text=item, command=seleccionar_pokemon) button.grid(sticky="nsew", row = index // 6, column = index % 6 ) # create elegibles here elegibles = [pypokedex.get(dex=dex_number) for dex_number in pokimones] for index, item in enumerate(elegibles): crear_boton(index)