Запуск каждого файла Python в отдельном процессе не является обычным способом написания больших (ish) проектов.
Вместо этого вы используете оператор import
, чтобы каждый из ваших файлов Python мог иметь доступ и использовать то, что находится в других файлах, и главный файл начальной точки, который управляет всем.
Если вы сделаете это обычным способом, экземпляр вашего ui
класса, который имеет ссылку на экран, будет в переменной, видимой в коде, который требует отображения, и вы можете получить экран, написав ui.screen
.
Теперь я понимаю, что вы хотите использовать tkinter
в своей игре - возможно, именно поэтому вы выбрали этот способ пробовать разные процессы, как обычное использование tkinter, и почти во всех примерах вам говорятtkinter.mainloop()
в какой-то момент.В самом деле, если вы сделаете это в том же процессе, где вы пытаетесь запустить код pygame, pygame остановится, поскольку цикл tkinter не обновит ваш основной цикл.
Здесь возможны два подхода:
- Вы сохраняете свой основной цикл Pygame как обычно, с
while True:
, и внутри этого цикла вызываете метод update()
вашего основного объекта tkinter.Никогда не звоните tkinter.mainloop
. - Вы переписываете свое тело цикла pygame как функцию, и вместо обычного
while True:
для запуска этого тела зарегистрируйте вызов к нему с помощью метода .after
в корневом объекте tkinter.Перерегистрируйте этот вызов в конце тела функции - и затем используйте mainloop tkinter для запуска всего.
Оба метода позволят вам иметь однопоточное приложение, которое запускает и pygame, и tkinterкод - и возможность просто импортировать классы и функции из других модулей Python и получать доступ к их атрибутам при необходимости.