我使用python和pygame制作了一个寻路可视化工具。截至目前,它一次只能模拟一种算法。我想生成多个窗口,每个窗口并排模拟不同的算法,以便可以相互分析算法。我有一个绘制GUI的函数client.run()。我正在尝试生成这样的多个实例:
p=threading.Thread(target = client.run)
q=threading.Thread(target = client.run)
p.start()
q.start()
但是通过这样做我的程序挂起了!有没有办法纠正这个问题,或者运行多个实例/窗口的其他方法?
答案 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)