Окно Pygame зависает при использовании потоков - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть скрипт pygame, который запускается с белым экраном и затем переходит на черный экран, когда пользователь что-то печатает. Пользовательский ввод обрабатывается другим потоком, и я использовал queue.Queue для передачи сообщений из потока ввода в Pygame.

Проблема в том, что всякий раз, когда я запускаю скрипт, окно пигмея через некоторое время останавливается. Если я что-то наберу быстро, экран изменит цвет с белого на черный, но окно все равно замерзнет. Я не уверен, где сценарий застревает?

import pygame
import threading 
import queue

q = queue.Queue()

pygame.init()

#rgb codes 
black = (0, 0, 0)
white = (255, 255, 255)

game_display = pygame.display.set_mode((800, 800))

def screen_1():

    crashed = False

    #holds messages from input thread
    msg = ''

    game_display.fill(white)

    while not crashed:

        #check if there are any messages in the queue
        try:
            msg = q.get(False)
        except queue.Empty:
            pass

        if msg:
            return screen_2()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                crashed = True        

        pygame.display.update()

def screen_2():

    crashed = False

    game_display.fill(black)

    while not crashed:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                crashed = True

        pygame.display.update()        

def inputFunc():
    msg = input('Type something:\n')
    q.put(msg)

t1 = threading.Thread(target = screen_1)
t2 = threading.Thread(target = inputFunc)

t1.start()
t2.start()

1 Ответ

1 голос
/ 28 апреля 2019

Ладно, я только что понял, что запуск бита pygame в потоке приводит к зависанию окна. Если я только создаю поток для inputFunc и вызываю screen_1, все работает просто отлично.

...