2012-03-17 48 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

相關問題