pygame.ошибка: видеосистема не инициализирована

#python #pygame

Вопрос:

Я получаю эту ошибку всякий раз, когда пытаюсь выполнить свой pygame код: pygame.error: video system not initialized

 from sys import exit
import pygame
from pygame.locals import *

black = 0, 0, 0
white = 255, 255, 255
red = 255, 0, 0
green = 0, 255, 0
blue = 0, 0, 255

screen = screen_width, screen_height = 600, 400

clock = pygame.time.Clock()

pygame.display.set_caption("Physics")

def game_loop():
  fps_cap = 120
  running = True
  while running:
      clock.tick(fps_cap)

      for event in pygame.event.get():  # error is here
          if event.type == pygame.QUIT:
              running = False

      screen.fill(white)

      pygame.display.flip()

  pygame.quit()
  exit()

game_loop()
#!/usr/bin/env python
 

Ответ №1:

Ты никуда не звонил pygame.init() .

См. Основное руководство по вводной части или специальное руководство по импорту и инициализации, в котором объясняется:

Прежде чем вы сможете многое сделать с pygame, вам нужно будет его инициализировать. Самый распространенный способ сделать это-просто сделать один звонок.

 pygame.init()
 

Это будет попытка инициализировать все модули pygame для вас. Не все модули pygame необходимо инициализировать, но это автоматически инициализирует те, которые это делают. Вы также можете легко инициализировать каждый модуль pygame вручную. Например, чтобы только инициализировать модуль шрифта, вы просто вызовете.

В вашем конкретном случае, вероятно pygame.display , это жалоба на то, что вы позвонили либо its set_caption , либо its flip , не позвонив init сначала. Но на самом деле, как говорится в руководстве, лучше просто init все наверху, чем пытаться выяснить, что именно нужно инициализировать, когда.

Ответ №2:

Изменение кода на этот позволяет избежать этой ошибки. во время работы: clock.tick(fps_cap)

 for event in pygame.event.get(): #error is here
    if event.type == pygame.QUIT:
        running = False
        pygame.quit()
if running:
     screen.fill(white)
     pygame.display.flip()
 

Ответ №3:

Вы получаете ошибку, потому что пытаетесь установить заголовок окна (с set_caption() ), но вы не создали окно pygame, поэтому ваша screen переменная-это просто кортеж, содержащий размер вашего будущего окна.

Чтобы создать окно pygame, вам нужно позвонить pygame.display.set_mode(windowSize) .

Удачи 🙂

Ответ №4:

Недавно у меня возникла эта проблема, и я обнаружил странную и необычную ошибку в написанном мной коде-только после того, как прочитал его и перечитал дюжину раз в течение 10 минут, пытаясь запустить файл (который выглядел идеально) дюжину раз.

Там был pygame.init() . Там была screen = pygame.display.set_mode((size)) переменная размера, доступная в глобальном пространстве имен.

Оказывается, это был основной игровой цикл.

 # main game loop
while RUNNING == True:
    for tneve in pygame.event.get():
        if tneve.type == QUIT:
            print(tneve)
            RUNNING = False
        loop()
        render()
        CLOCK.tick(FPS)
    cleanup()
# End
 

Какая боль!

P.S. Проблема заключается в слишком большом отступе всего, что приведено ниже RUNNING = False .

Комментарии:

1. Это отличная история, Тим, и спасибо, что поделился с нами, но она не отвечает на вопрос и описывает другую проблему.

Ответ №5:

  1. Если вы это сделаете pygame.init() , то решите проблему с инициализацией видеосистемы. но вы получаете следующую ошибку, например:

( AttributeError: tuple object has no attribute 'fill' ) это.


  1. эта проблема решается, когда вы делаете это
 screen = pygame.display.set_mode((600, 400))
 

но не делать так, как

 screen = screen_width, screen_height = 600, 400
 

  1. Тогда вся проблема будет решена.

Ответ №6:

Я внес некоторые изменения в ваш код:

 import os
import sys
import math
import pygame
import pygame.mixer
from pygame.locals import *

pygame.init()
black = 0, 0, 0
white = 255, 255, 255
red = 255, 0, 0
green = 0, 255, 0
blue = 0, 0, 255

screen = pygame.display.set_mode((600, 400))

clock = pygame.time.Clock()

pygame.display.set_caption("Physics")


while True:
    clock.tick(120)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
    screen.fill(green)

    pygame.display.flip()
 

Ответ №7:

Вам просто нужно добавить

 exit()
 

Чтобы остановить выполнение
примера кода :

 for event in pygame.event.get(): #error is here
    if event.type == pygame.QUIT:
        running = False
        exit() # Solution
 

Ответ №8:

Вы должны добавить:

 pygame.init()
 

Прежде чем выйти из дисплея, вы должны остановить цикл while.

Ответ №9:

Если вы используете class для своего pygame окна, не используйте pygame.init() в своем class . Используйте pygame.init() в нижеприведенных библиотеках.

Ответ №10:

  1. Вам необходимо инициализировать pygame с помощью этой команды pygame.init
     If the problem is not solved then following this step
     
  2. эта проблема возникает при использовании бета-версии.
  3. поэтому я предлагаю, пожалуйста, использовать новую, старую версию(если сейчас есть python 3.8, вам нужно установить python 3.7).
  4. Теперь перейдите к терминалу python и установите pygame (pip install pygame)
  5. теперь проблема решена…