提问:
pyinstaller打包后重复运行程序(单线程)
源码:
from os import system import random import pygame,sys size=50 system("maze "+str(size)) size=int(size) image_max_size=50 rdnum=size/2 pygame.init() #acon=pygame.image.load("mainper.png") #pygame.display.set_icon(acon) #pygame.display.set_caption("maze") wall=pygame.image.load("wall.png") road=pygame.image.load("road.png") mainper=pygame.image.load("mainper.png") end=pygame.image.load("end.png") qwertyuiop=open("mrd.txt","r") rem=pygame.image.load("re.png") a=qwertyuiop.readlines() a=a[1:] class re: def __init__(self,xx,yy): self.x=xx self.y=yy def run(self): while 1==1: rn=random.randint(0,3) if rn==0: self.x=self.x+1 if not (self.x>=0 and self.x<size and self.y>=0 and self.y<size and a[self.x][self.y]=='1' ): self.x=self.x-1 else: break elif rn==1: self.x=self.x-1 if not (self.x>=0 and self.x<size and self.y>=0 and self.y<size and a[self.x][self.y]=='1'): self.x=self.x+1 else: break elif rn==2: self.y=self.y+1 if not (self.x>=0 and self.x<size and self.y>=0 and self.y<size and a[self.x][self.y]=='1'): self.y=self.y-1 else: break elif rn==3: self.y=self.y-1 if not (self.x>=0 and self.x<size and self.y>=0 and self.y<size and a[self.x][self.y]=='1'): self.y=self.y+1 else: break remi=re(size-1,size-1) if size>14: image_max_size=8 wall=pygame.image.load("wall_l.png") road=pygame.image.load("road_l.png") mainper=pygame.image.load("mainper_l.png") end=pygame.image.load("end_l.png") screen=pygame.display.set_mode([size*image_max_size,size*image_max_size]) screen.blit(rem,[remi.x*8,remi.y*8]) pygame.time.set_timer(pygame.USEREVENT,500) per=[0,0] screen.fill([0,0,0]) for i in range(0,size): for j in range(0,size): #print i,j,i==0 and j==0,'\n' if a[i][j]=="1": screen.blit(road,[i*image_max_size,j*image_max_size]) screen.blit(mainper,per) screen.blit(end,[(size-1)*image_max_size,(size-1)*image_max_size]) #print i,j,a[i][j],[i*image_max_size,j*image_max_size],'\n' #screen.blit(road,[0*image_max_size,3*image_max_size]) def inwall(): if per[0]<size*image_max_size and per[1]<size*image_max_size and per[0]>=0 and per[1]>=0: if a[per[0]//image_max_size][per[1]//image_max_size]=="1": return 1 return 0 pygame.key.set_repeat(100,50) running=True while running: if per[0]==(size-1)*image_max_size and per[1]==(size-1)*image_max_size: running=False for event in pygame.event.get(): if event.type==pygame.QUIT: running=False elif event.type==pygame.KEYDOWN: if event.key==pygame.K_DOWN: screen.blit(road,per) per[1]+=image_max_size if not inwall(): per[1]-=image_max_size screen.blit(mainper,per) else: screen.blit(mainper,per) elif event.key==pygame.K_UP: screen.blit(road,per) per[1]-=image_max_size if not inwall(): per[1]+=image_max_size screen.blit(mainper,per) else: screen.blit(mainper,per) elif event.key==pygame.K_RIGHT: screen.blit(road,per) per[0]+=image_max_size if not inwall(): per[0]-=image_max_size screen.blit(mainper,per) else: screen.blit(mainper,per) elif event.key==pygame.K_LEFT: screen.blit(road,per) per[0]-=image_max_size if not inwall(): per[0]+=image_max_size screen.blit(mainper,per) else: screen.blit(mainper,per) elif event.type==pygame.USEREVENT: screen.blit(road,[remi.x*8,remi.y*8]) remi.run() screen.blit(rem,[remi.x*8,remi.y*8]) pygame.display.flip() pygame.quit()
解答:
在main中加这一行:
multiprocessing.freeze_support()
这个问题可能是由于使用的模块中有多线程或者并发处理的问题