У меня есть несколько модулей python
classes.py:
class screen:
def __init__(self,elements):
self.elements=elements
def show(self):
for element in self.elements:
self.elements[element].show()
def execute(self):
for element in self.elements:
if self.elements[element].executable:
self.elements[element].execute()
command = input()
self.elements[command].action()
class button:
def __init__(self,text,action):
self.executable=False
self.text=text
self.action=action
def show(self):
print(self.text)
class mission:
def __init__(self,structure,actions):
self.structure=structure
self.actions=actions
funcs.py
from game import setScreen
from classes import *
import sys
def StartGame():
setScreen(StartGameScreen)
def Settings():
setScreen(SettingsScreen)
def Quit():
sys.exit()
def NewGame():
pass
def LoadGame():
pass
def DeleteGame():
pass
StartGameButton=button('Начать игру',StartGame)
SettingsButton=button('Настройки',Settings)
QuitButton=button('Выйти из игры',Quit)
screen1=screen({'1':StartGameButton,'2':SettingsButton,'3':QuitButton})
NewGameButton=button('Новая игра',NewGame)
LoadGameButton=button('Загрузить',LoadGame)
DeleteGameButton=button('Удалить запись',DeleteGame)
StartGameScreen=screen({'1':NewGameButton,
'2':LoadGameButton,
'3':DeleteGameButton})
game.py
from funcs import *
import sys
curscreen=None
def setScreen(value):
global curscreen
curscreen=value
curscreen.show()
try:
curscreen=screen1
curmission=None
except NameError:
pass
try:
while 1:
curscreen.show()
curscreen.execute()
except (NameError,AttributeError):
pass
С помощью функции setScreen я хочу изменять значение переменной curscreen в модуле game из модуля funcs. Если вызвать setScreen(StartGameScreen) в интерактивном режиме из модуля game.py, то все идет как надо.
Однако если вызвать функцию StartGame, содержащую все тот же setScreen(StartGameScreen), то ничего не поменяется. В чем проблема?