请大家帮忙看一下下面的程序,感谢!
#encoding=utf-8
import threading
import time
import pygame
from pygame.locals import *
from sys import exit
def test():
global even_text
while True:
event = pygame.event.wait()
event_text.append(str(event))
#获得时间的名称
event_text = event_text[-SCREEN_SIZE[1]/font_height:]
#这个切片操作保证了event_text里面只保留一个屏幕的文字
if event.type == QUIT:
exit()
screen.fill((255, 255, 255))
y = SCREEN_SIZE[1]-font_height
#找一个合适的起笔位置,最下面开始但是要留一行的空
for text in reversed(event_text):
screen.blit( font.render(text, True, (0, 0, 0)), (0, y) )
#以后会讲
y-=font_height
#把笔提一行
pygame.display.update()
class MyThread(threading.Thread):
def init(self,arg):
super(MyThread, self).__init__()#注意:一定要显式的调用父类的初始化函数。
self.arg=arg
def run(self):#定义每个线程要运行的函数
time.sleep(1)
test()
print 'the arg is:%s\r' % self.arg
pygame.init()
SCREEN_SIZE = (640, 480)
screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
font_height = font.get_linesize()
event_text = []
t =MyThread(1)
t.start()
print 'main thread end!'
我想运行pygame部分的时候另外开一个线程(为了可以在控制台打印一些信息,如果不另外开线程或者进程的话我不知道怎么才可以在显示pygame的窗口的时候在控制台输入输出信息,求大神指教)。pygame部分(函数test())输出的是触发的时间信息。
但是如果我像上面这样写,只要鼠标点到pygame窗口就会卡死,但是控制台正常。
如果我把程序改成如下这样(把pygame 的init换到新开的线程里进行),就运行正常,我想知道为什么,请大神指教!
#encoding=utf-8
import threading
import time
import pygame
from pygame.locals import *
from sys import exit
def test():
pygame.init()
SCREEN_SIZE = (640, 480)
screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)
font = pygame.font.SysFont("arial", 16)
font_height = font.get_linesize()
event_text=[]
while True:
event = pygame.event.wait()
event_text.append(str(event))
#获得时间的名称
event_text = event_text[-SCREEN_SIZE[1]/font_height:]
#这个切片操作保证了event_text里面只保留一个屏幕的文字
if event.type == QUIT:
exit()
screen.fill((255, 255, 255))
y = SCREEN_SIZE[1]-font_height
#找一个合适的起笔位置,最下面开始但是要留一行的空
for text in reversed(event_text):
screen.blit( font.render(text, True, (0, 0, 0)), (0, y) )
#以后会讲
y-=font_height
#把笔提一行
pygame.display.update()
class MyThread(threading.Thread):
def init(self,arg):
super(MyThread, self).__init__()#注意:一定要显式的调用父类的初始化函数。
self.arg=arg
def run(self):#定义每个线程要运行的函数
time.sleep(1)
test()
print 'the arg is:%s\r' % self.arg
t =MyThread(1)
t.start()
print 'main thread end!'