Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将.py转换为.exe将生成黑色窗口应用程序,并在几秒钟后消失_Python_Python 3.x_Pygame_Pyinstaller - Fatal编程技术网

Python 将.py转换为.exe将生成黑色窗口应用程序,并在几秒钟后消失

Python 将.py转换为.exe将生成黑色窗口应用程序,并在几秒钟后消失,python,python-3.x,pygame,pyinstaller,Python,Python 3.x,Pygame,Pyinstaller,我试图将pygame项目转换为一个.exe文件,但输出为黑色窗口(图3) 我尝试过使用auto-py to-exe应用程序来实现这一点,设置如下(图1)。在此之前,我在PowerShell中尝试过这行代码 PS D:\my_projects\python_projects\tic_tac_toe_project> pyinstaller --onefile -w tic_tac_toe.py 两种解决方案返回相同的输出(图2和图3),没有错误消息,而预期的输出为(图4) 图像1 图像2

我试图将pygame项目转换为一个.exe文件,但输出为黑色窗口(图3)

我尝试过使用auto-py to-exe应用程序来实现这一点,设置如下(图1)。在此之前,我在PowerShell中尝试过这行代码

PS D:\my_projects\python_projects\tic_tac_toe_project> pyinstaller --onefile -w tic_tac_toe.py
两种解决方案返回相同的输出(图2和图3),没有错误消息,而预期的输出为(图4)

图像1

图像2

图像3

图像4

编辑: 因此,使用
pygame.font.SysFont()
时会出现问题。我不知道为什么它不能工作,而且很难找到,因为它使用了一个.pyd文件,我相信这是一个c API的扩展名。解决方法是改用
pygame.font.font()
。在你的应用程序中,你发送
None
作为字体,它只返回pygame的默认字体freesansbold.ttf。要使用此字体,您需要将其包含在软件包中,因为它在windows注册表中不存在

import os#在规格表顶部导入os和pygame
导入pygame
pygame_dir=os.path.dirname(pygame._文件)#获取本地pg安装的名称
path\u t\u font=os.path.join(pygame\u dir,'freesansbold.ttf')
a=分析(['tic\u tac\u toe.py'],
pathex=[],
二进制文件=[],
数据=[(路径_t_字体,'.')],#将字体添加到数据中
.....
然后您需要将
用户界面.py中的第12行更改为:

#self.font=pygame.font.SysFont(无,24)使用下面的代码代替此选项
self.font=pygame.font.font('freesansbold.ttf',24)
不知道为什么会发生这种情况,但这是一个黑客修复

如果要使用
--onefile
模式,还需要将其添加到tic\u tac\u toe.py脚本的顶部

导入系统,操作系统 os.chdir(系统)

来自old anwer: 将详细标志添加到PyInstaller规范表中,以了解正在发生的情况。首先使用
pyi makespec
创建规范表,然后打开它创建的规范表

转到
exe=exe
部分并添加此代码位

exe=exe(pyz,
a、 剧本,
[('v',None',OPTION')],#在此处添加此项
exclude_binaries=True,
name='main',
debug=False,
引导加载程序\u忽略\u信号=False,
strip=False,
upx=真,
控制台=真)

现在,使用自定义规范表捆绑您的包并运行它。您应该会得到一个控制台,该控制台将显示一些消息。这将告诉您正在加载的内容,并让您了解正在发生的情况。

我在控制台窗口中未发现任何错误。几秒钟后它仍然会消失,但所有文件都已导入。因此,我仍然不知道是什么原因这是错的?你有任何依赖项吗?图标、图像、文件?不,它只是多个.py文件项目。我刚刚制作了一个包含所有类的测试文件,唯一导入的是“sys”、“pygame”、“pygame.font”。当我尝试制作.exe时,结果是一样的。没有错误,黑色应用程序窗口。错误输入了最后一条注释。从运行栏(windowskey-r)键入
cmd/k“exe的完整路径”
。这将使控制台保持打开状态,以便查看错误。请确保在规格表中的console=true。