if escena == menu:
menu.update()
if escena == juego:
juego.update()
etc...
Obviamente desde el menú debo poder cambiar el valor de la variable "escena" de tal forma que si hago clic sobre la opción Jugar se inicie el juego, si hago clic sobre Ayuda se muestre una pantalla con instrucciones, etc. La variable "escena" está definida en el archivo "ejecutar.py" y "menú" es una clase definida en otro archivo. El tema está en que para que pueda realizar dicho cambio, "escena" debe ser una lista, inicializándola por ejemplo así: escena = ["menu"], y cada vez que quiera cambiar su valor debería hacerlo así: escena[0] = "juego". Si intento que escena sea de tipo String no me funciona, es decir, si inicializo escena así: escena = "menu", desde la clase menu no puedo hacer escena = "juego".
Así es como lo estoy haciendo ahora para que me funcione:
En el archivo "ejecutar.py" inicializo la variable escena como una lista y se la paso a la clase menu como parámetro
escena = ["menu"]
menu = menu.Menu(window, escena)
En el archivo menu.py pido la variable como parámetro y la convierto en local
class Menu:
def __init__(self, window, escena):
#Creamos las variables de control
self.window = window
self.escena = escena
Y para modificar su valor desde menu.py:
if clic_en_opcion_jugar:
self.escena[0] = "juego"
Obviamente clic_en_opcion_jugar es un método inventado para no poner la enorme línea de código que realmente va ahí.
He comprobado que si escena es de tipo string y al pasársela a menu.py la hago local con self.escena = escena, al cambiar el valor de self.escena, solo cambia el valor de self.escena pero no el de escena, es decir, es como si parámetro se hubiese pasado por valor en vez de por referencia. En cambio, si escena es de tipo lista, al cambiar el valor de self.escena cambia el valor de ambas variables como si se hubiese pasado por referencia.
Como he dicho, haciéndolo así (con una lista) me funciona, porque no puedo hacerlo usando por ejemplo un string?
Un saludo y gracias!