2012-03-17 21 views
1

我用python和pygame做了一个寻路可视化器。到目前为止,它一次只能模拟一种算法。我想生成多个窗口,每个窗口都模拟不同的算法,并排排列,以便可以对算法进行相互分析。我有一个绘制GUI的函数client.run()。我试图产生这样的多个实例:来自同一个python程序的多个GUI屏幕

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

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

回答

2

Pygame是建立在一个单一窗口的过程中,你无法避免这种情况。 pygame.display模块为你设置了一个“显示”,这就是你所得到的。

您看起来很好,因为您已经设计了软件来使用线程,并让每个线程控制显示器。只需更改多线程的“线程化”Python模块,并使用多处理。使用进程而不是线程.Threads - 只要你在每个子进程中初始化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) 
+0

谢谢你的回答,但是当我尝试运行这段代码,没有窗口出现,相反,我看到的流程和100S最后一个系统崩溃。 – AccurateEstimate 2012-03-18 00:10:24

+0

怪异的,因为我实例化3过程,在“为我在范围(3)”行。你的操作系统可能会有pygame的副作用 - 我假设你在windows上? – jsbueno 2012-03-18 15:00:08

+0

是的,我在窗户上。我已经通过使用subprocess.Popen()解决了这个问题。感谢您的帮助! :) – AccurateEstimate 2012-03-18 18:13:20

相关问题