来自同一个python程序的多个GUI屏幕

时间:2012-03-17 21:51:18

标签: python user-interface pygame path-finding

我使用python和pygame制作了一个寻路可视化工具。截至目前,它一次只能模拟一种算法。我想生成多个窗口,每个窗口并排模拟不同的算法,以便可以相互分析算法。我有一个绘制GUI的函数client.run()。我正在尝试生成这样的多个实例:

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

但是通过这样做我的程序挂起了!有没有办法纠正这个问题,或者运行多个实例/窗口的其他方法?

1 个答案:

答案 0 :(得分:2)

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)