Как переключаться между разными модулями(сценами) в Pygame?

Есть 3 файла:
- main.py - откуда вызывается mainMenu как главное меню
- mainMenu.py - откуда вызывается game при нажатии на кнопку "Play"
- game.py - откуда вызывается mainMenu при нажатии на кнопку выхода на главное меню

Хотелось бы сделать возможность возвращаться обратно на главный экран(mainMenu.py), например, при нажатии ESCAPE.
В результате получилось примерно так:

main.py:
import pygame
from pygame.locals import *

pygame.init()

screen = pygame.display.set_mode((1024, 576))
pygame.display.set_caption("game")
pygame.mouse.set_visible(False)
clock = pygame.time.Clock()

if __name__ == '__main__':
	from mainMenu import mainMenu
	mainMenu()

mainMenu.py:
import pygame
from pygame import QUIT
from button import Button
from game import game
from main import screen,clock
def mainMenu():
	bt = Button(разные аргументы)
	while 1:
		clock.tick(75)
		screen.fill((28, 21, 53))

		# ...

		for event in pygame.event.get():
			if event.type == pygame.MOUSEBUTTONDOWN:
				if bt.collision_mouse:
					game()
			if event.type == QUIT:
				exit()
		
        bt.render()
		
		pygame.display.update()

game.py:
import pygame
from pygame.locals import *
from main import screen,clock,cursor
from mainMenu import mainMenu
def game():
	while 1:
		clock.tick(60)
		screen.fill((51, 153, 218))

        # ...

		for event in pygame.event.get():
			if event.type == KEYDOWN:
				if event.key == K_ESCAPE:
					mainMenu()
			elif event.type == KEYUP:
				# ...
				pass
			if event.type == QUIT:
				exit()

        # ...
		pygame.display.update()

Все модули сильно сокращены чтобы показать главные проблемные места.

При попытке запустить игру появляются ошибки, связанные с круговым импортом(circular import).
Как можно решить данную проблему?
  • Вопрос задан
  • 347 просмотров
Решения вопроса 1
Fire_Fall
@Fire_Fall Автор вопроса
Решил проблему, переместив все импорты в сами функции, чтобы импорт происходил только когда мы вызываем сцену.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы