Несколько экранов графического интерфейса из одной и той же программы Python - PullRequest
1 голос
/ 18 марта 2012

Я сделал визуализатор поиска пути, используя python и pygame. На данный момент он может моделировать только один алгоритм за раз. Я хочу создать несколько окон, каждое из которых имитирует разные алгоритмы, чтобы алгоритмы можно было анализировать друг против друга. У меня есть функция client.run (), которая рисует графический интерфейс. Я пытаюсь создать несколько экземпляров, подобных этому:

p=threading.Thread(target = client.run)
q=threading.Thread(target = client.run)
p.start()
q.start()    

Но при этом моя программа зависает! Есть ли способ исправить эту проблему, или альтернативный способ запуска нескольких экземпляров / Windows?

1 Ответ

2 голосов
/ 18 марта 2012

Pygame построен таким образом, чтобы иметь одно окно за процессом, вы не можете избежать этого. Модуль pygame.display устанавливает вам «дисплей», и это то, что вы получаете.

Вы хорошо выглядите, так как вы разработали свое программное обеспечение для работы с потоками, и каждый поток управляет отображением. Просто измените «многопоточный» Python-модуль для многопроцессорной обработки и используйте multiprocessing.Process вместо многопоточности. Потоки - если вы инициализируете pygame и его отображение в каждом подпроцессе, все будет в порядке.

Я только что попробовал здесь и пример ниже работает отлично:

# -*- coding: utf-8 -*-
import pygame
import multiprocessing
from time import sleep



def init():
    pygame.init()
    screen = pygame.display.set_mode((320,240))
    return screen

def main():
    screen = init()
    while True:
        pygame.event.pump()
        event =  pygame.event.poll()
        if event.type != pygame.NOEVENT:
            print event


class Multigame(multiprocessing.Process):
    def run(self):
        return main()

for i in range(3):
    Multigame().start()

while True:
    sleep(1)
...