Только некоторые проекты Pygame работают после преобразования из .py в .exe - PullRequest
0 голосов
/ 06 января 2019

Я хочу иметь возможность конвертировать .py в .exe для проектов Python 3 Pygame 1.9.4 (на моем компьютере с Windows 10), и я успешно конвертировал некоторые файлы с помощью auto py в exe (один файл, на основе консоли). ): https://nitratine.net/blog/post/auto-py-to-exe/. Например, я попытался преобразовать код, который довольно далеко на этом сайте: http://openbookproject.net/thinkcs/python/english3e/pygame.html. То есть:

import pygame

def main():
    """ Set up the game and run the main game loop """
    pygame.init()      # Prepare the pygame module for use
    surface_sz = 480   # Desired physical surface size, in pixels.

    # Create surface of (width, height), and its window.
    main_surface = pygame.display.set_mode((surface_sz, surface_sz))

    # Set up some data to describe a small rectangle and its color
    small_rect = (300, 200, 150, 90)
    some_color = (255, 0, 0)        # A color is a mix of (Red, Green, Blue)

    while True:
        ev = pygame.event.poll()    # Look for any event
        if ev.type == pygame.QUIT:  # Window close button clicked?
            break                   #   ... leave game loop

        # Update your game objects and data structures here...

        # We draw everything from scratch on each frame.
        # So first fill everything with the background color
        main_surface.fill((0, 200, 255))

        # Overpaint a smaller rectangle on the main surface
        main_surface.fill(some_color, small_rect)

        # Now the surface is ready, tell pygame to display it!
        pygame.display.flip()

    pygame.quit()     # Once we leave the loop, close the window.

main()

.exe файл запускался, как и должен при открытии. Однако некоторые программы, которые я пишу, работают только частично после преобразования. Одна такая программа будет:

import pygame as pg

def main():
    pg.init()
    pg.display.set_caption('Some Caption')
    screen = pg.display.set_mode((640, 480))

    afont = pg.font.SysFont("some_font", 32)
    done=False
    while not done:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                done = True
        screen.fill(0)
        sometext = afont.render("Amazing text"
                .format(0, 0), True, (250,200,250))
        screen.blit(sometext, (10, 50))
        pg.display.flip()


if __name__.endswith('__main__'):
    main()
    pg.quit()

После преобразования в exe, когда я его открываю, появляется текст о pygame, а также экран, который должен появиться, показывая заголовок, который я установил ('Some Caption'). Экран, который выскочил, однако, черный и закрывается через некоторое время, не показывая, что он должен. Тем не менее, я получил свой exe-файл без каких-либо ошибок (что я мог видеть в любом случае в выводе графического интерфейса, который я использовал для преобразования, то есть auto py в exe). Итак, в поисках решений я нашел этот сайт: https://nitratine.net/blog/post/issues-when-using-auto-py-to-exe/.

Было много сообщений об ошибках и общей информации, но то, что я видел по поводу программы, которая открывается, но не делает то, что должно, перед закрытием было:

Терминал просто открывается и закрывается, но ошибок нет двойной щелчок для запуска скрипта Python, что происходит? Открывается ли и закрыть тоже? Это означает, что этот инструмент сделал свою работу правильно и Сценарий заканчивается так же, как и должен.

Скорее всего, вы думаете, что результат должен оставаться видимым, потому что вы всегда использую IDLE или IDE, и это то, что делают эти инструменты. Добавить оператор как input () в конце вашего скрипта, чтобы заблокировать выполнение и ждите, пока вы нажмете ввод, прежде чем закрыться.

Это не решение моей проблемы, так как моя программа работает, если я дважды щелкну на скрипте python. Тем не менее, я думаю, что в этом есть хороший момент, то есть в моем коде может быть что-то, что плохо обрабатывает преобразование, что вероятно, поскольку код из http://openbookproject.net/thinkcs/python/english3e/pygame.html сработал после преобразования в .exe, когда использовался тот же метод.

Поэтому мой вопрос, , что делает мой код неработающим после преобразования из .py в .exe? , и , в таком случае, каким образом это можно исправить? . Знание того, что работает, а что нет, когда дело доходит до преобразования .py в .exe, позволит большему количеству программ работать правильно, когда они являются .exe.

Спасибо

...