Ошибка сегментации с открытием и закрытием окон Pygame - PullRequest
1 голос
/ 30 октября 2019

Я работаю над проектом, в котором я пытаюсь переключаться между предварительным просмотром камеры на Picamera и некоторым текстом на экране, используя окна Pygame. Я дошел до того, что я могу открыть Picamera, затем некоторый текст, затем снова Picamera, но когда я пытаюсь открыть окно Pygame для большего количества текста, я получаю ошибку сегментации.

Я думаю, что главная проблема - это выход из окна пигмея, не выходя из других вещей, которые мне нужны, чтобы открыть другое окно пигмея. Команды, такие как sys.exit и pygame.quit, похоже, слишком много бросают. Я пробовал альтернативы, такие как помещение текста в цикл while и затем создание цикла false в конце, чтобы он закрывал окно без фактической команды выхода, но, похоже, это ничего не закрывало. Код работает отлично, пока я не попытаюсь инициализировать Pygame во второй раз. Именно тогда он дает мне ошибку сегментации и открывает новое окно в моем простое Python с целой кучей другого кода, который я не писал.

pygame.init()

white = (255, 255, 255)
green = (0, 255, 0)
blue= (0, 0, 128)
black = (0, 0, 0)
display_surface = pygame.display.set_mode((1350,800))
pygame.display.set_caption('   ')

camera()

font = pygame.font.Font('freesansbold.ttf', 30)
text = font.render('You', True, black, white)
textRect = text.get_rect()
textRect.center = (1350//2, 800//2)
display_surface.fill(white)
display_surface.blit(text, textRect)
for event in pygame.event.get():
     if event.type == pygame.QUIT:
         pygame.quit()
         quit()
     pygame.display.update()
     time.sleep(1)
     pygame.quit()

camera()

pygame.init()

white = (255, 255, 255)
green = (0, 255, 0)
blue= (0, 0, 128)
black = (0, 0, 0)
display_surface = pygame.display.set_mode((1350,800))
pygame.display.set_caption('   ')
font = pygame.font.Font('freesansbold.ttf', 30)
text = font.render('test', True, black, white)
textRect = text.get_rect()
textRect.center = (1350//2, 800//2)
display_surface.fill(white) 
display_surface.blit(text, textRect)
for event in pygame.event.get():
   if event.type == pygame.QUIT:
        pygame.quit()
         quit()
pygame.display.update()
time.sleep(1)

То, что я хотел бы сделать, это переключаться между picamera и текстом еще несколько раз, поэтому, если я смогу выяснить, как исправить это один раз, тогда мне просто нужно скопировать и вставитькод немного больше, чтобы получить следующие итерации. Я новичок в кодировании.

1 Ответ

2 голосов
/ 30 октября 2019

Хорошо. поэтому я сделал глупую ошибку. По какой-то причине проблема заключается в двойной инициализации pygame;что я до сих пор не понимаю, так как pygame.quit() должен был бросить это, я думаю. Но я просто удалил второй pygame.init() и заменил первый pygame.quit() на pygame.display.quit().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...