gpt4 book ai didi

python - 使用 Tkinter 时出现致命的 python 错误(pygame 降落伞)段错误

转载 作者:行者123 更新时间:2023-11-28 16:36:03 25 4
gpt4 key购买 nike

我在 pygamepython 2.7 中制作了小游戏,并使用 Tkinter 添加了提交框。

在我用 py2exe/pygame2exe 编译它之前它一直运行良好。

编译没有错误。

但是当我点击 exe 文件启动应用程序时,编译代码抛出了这个错误:

    fatal python error (pygame parachute) Segmentation Fault
This application has terminated in unusal way for more
information contact application support team.

当我删除 Tkinter 代码并编译它时,它运行良好。

这是 Tkinter 代码的一部分:

    #i tried importing both with import Tkinter and from Tkinter import*


if event.key==pygame.K_s:
subbox=Tkinter.Tk()
subbox_label=Tkinter.Label(subbox,text="Type your name:")
subbox_label.pack()
subbox_entry=Tkinter.Entry(subbox)
subbox_entry.pack()
def savescore(a):
a=str(a)
print a
print subbox_entry.get()
player_name=subbox_entry.get()
player_score=a
subbox_button=Tkinter.Button(text="Click",command=lambda:savescore(score))
subbox_button.pack()
subbox.mainloop()

更新:

我逐行踢出 Tkinter 代码,发现导入 Tkinter 导致错误!

这意味着如果我刚刚:

import Tkinter

我的游戏无法运行!!! 我该怎么办?

安装文件(pygame2exe,但我可能不小心删除了里面的东西):

try:
from distutils.core import setup
import py2exe, pygame
from modulefinder import Module
import glob, fnmatch
import sys, os, shutil
import operator

except ImportError, message:
raise SystemExit, "Unable to load module. %s" % message

#hack which fixes the pygame mixer and pygame font
origIsSystemDLL = py2exe.build_exe.isSystemDLL # save the orginal before we edit it
def isSystemDLL(pathname):
# checks if the freetype and ogg dll files are being included
if os.path.basename(pathname).lower() in ("libfreetype-6.dll", "libogg-0.dll","sdl_ttf.dll"): # "sdl_ttf.dll" added by arit.
return 0
return origIsSystemDLL(pathname) # return the orginal function
py2exe.build_exe.isSystemDLL = isSystemDLL # override the default function with this one

class pygame2exe(py2exe.build_exe.py2exe): #This hack make sure that pygame default font is copied: no need to modify code for specifying default font
def copy_extensions(self, extensions):
#Get pygame default font
pygamedir = os.path.split(pygame.base.__file__)[0]
pygame_default_font = os.path.join(pygamedir, pygame.font.get_default_font())

#Add font to list of extension to be copied
extensions.append(Module("pygame.font", pygame_default_font))
py2exe.build_exe.py2exe.copy_extensions(self, extensions)

class BuildExe:
def __init__(self):
#Name of starting .py
self.script = "game_0.3.py"

#Name of program
self.project_name = "game"

#Project url
self.project_url = "it will be on sourceforge and indieDB"

#Version of program
self.project_version = "0.3"

#License of the program
self.license = "gnu gpl 2.0"

#Auhor of program
self.author_name = "John Doe "
self.author_email = "i dont want spam"
self.copyright = "John Doe 2014"

#Description
self.project_description = None

#Icon file (None will use pygame default icon)
self.icon_file = "icon.ico"

#Extra files/dirs copied to game
self.extra_datas = ["block.png","CHARACTER.png","icon.ico","COPYING.txt","README1.txt","name.txt","score.txt"]

#Extra/excludes python modules
self.extra_modules = []
self.exclude_modules =['AppKit', 'Foundation', 'Numeric', 'OpenGL.GL', '_scproxy', '_sysconfigdata', 'copyreg', 'dummy.Process', 'numpy', 'pkg_resources', 'queue', 'winreg', 'pygame.sdlmain_osx']

#DLL Excludes
self.exclude_dll = ['']
#python scripts (strings) to be included, seperated by a comma
self.extra_scripts = []

#Zip file name (None will bundle files in exe instead of zip file)
self.zipfile_name =None

#Dist directory
self.dist_dir ='dist'

## Code from DistUtils tutorial at http://wiki.python.org/moin/Distutils/Tutorial
## Originally borrowed from wxPython's setup and config files
def opj(self, *args):
path = os.path.join(*args)
return os.path.normpath(path)

def find_data_files(self, srcdir, *wildcards, **kw):
# get a list of all files under the srcdir matching wildcards,
# returned in a format to be used for install_data
def walk_helper(arg, dirname, files):
if '.svn' in dirname:
return
names = []
lst, wildcards = arg
for wc in wildcards:
wc_name = self.opj(dirname, wc)
for f in files:
filename = self.opj(dirname, f)

if fnmatch.fnmatch(filename, wc_name) and not os.path.isdir(filename):
names.append(filename)
if names:
lst.append( (dirname, names ) )

file_list = []
recursive = kw.get('recursive', True)
if recursive:
os.path.walk(srcdir, walk_helper, (file_list, wildcards))
else:
walk_helper((file_list, wildcards),
srcdir,
[os.path.basename(f) for f in glob.glob(self.opj(srcdir, '*'))])
return file_list

def run(self):
if os.path.isdir(self.dist_dir): #Erase previous destination dir
shutil.rmtree(self.dist_dir)

#Use the default pygame icon, if none given
if self.icon_file == None:
path = os.path.split(pygame.__file__)[0]
self.icon_file = os.path.join(path, 'pygame.ico')

#List all data files to add
extra_datas = []
for data in self.extra_datas:
if os.path.isdir(data):
extra_datas.extend(self.find_data_files(data, '*'))
else:
extra_datas.append(('.', [data]))

setup(
cmdclass = {'py2exe': pygame2exe},
version = self.project_version,
description = self.project_description,
name = self.project_name,
url = self.project_url,
author = self.author_name,
author_email = self.author_email,
license = self.license,

# targets to build
console = [{
'script': self.script,
'icon_resources': [(0, self.icon_file)],
'copyright': self.copyright
}],
options = {'py2exe': {'optimize': 2, 'bundle_files': 1, 'compressed': True, \
'excludes': self.exclude_modules, 'packages': self.extra_modules, \
'dll_excludes': self.exclude_dll,
'includes': self.extra_scripts} },
zipfile = self.zipfile_name,
data_files = extra_datas,
dist_dir = self.dist_dir
)

if os.path.isdir('build'): #Clean up build dir
shutil.rmtree('build')

if __name__ == '__main__':
if operator.lt(len(sys.argv), 2):
sys.argv.append('py2exe')
BuildExe().run() #Run generation
raw_input("Press any key to continue") #Pause to let user see that things ends

另一件重要的事情:如果我在 pygame 之前导入 Tkinter,则不会出现段错误,但游戏不会运行,并且会弹出错误窗口并显示此应用程序请求运行时以不寻常的方式终止以获取更多信息联系应用支持

最佳答案

你检查过 py2exe/Bugs 了吗?

虽然这不是完全相同的崩溃,根本原因与 Tkinter 内部对 Tcl 和 Tk DLL 服务子层的依赖相关似乎相似:

引用:

"""

使用 Tkinterbundle_files = 1,我立即崩溃。

这是我的设置:

    winxp sp2
py2exe 0.6.8
python 2.5.1

我的测试文件是“example.py”,如下:

#### start
from Tkinter import *
if __name__ == '__main__':
print "hello"
#### end
my setup.py is as follows:
#### start
from distutils.core import setup
import py2exe
setup(
options = {'py2exe': {'bundle_files': 1}},
zipfile = None,
console=['example.py'])
#### end

它编译得很好,但是当运行在“dist”目录中生成的“example.exe”时,它立即得到错误信息“example.exe”。 exe 遇到问题需要关闭。对于给您带来的不便,我们深表歉意。

使用相同的 setup.py,但 bundle_files = 3 工作正常;使用 bundle_files = 2 会导致同样的崩溃。

我希望这些信息足以重现此错误。如果您需要,我很乐意提供任何其他信息 - 只需在此处发回即可。

"""

+ 提出的解决方法:

引用:

"""

我通过编辑 site-packages/py2exe/build_exe.py 来“修复”这个问题,

添加tcl85.dll”和“tk85.dll”到“dlls_in_exedir”列表

-- 这意味着它们被放在 .exe 旁边而不是捆绑在其中

有点乱,但比 bundled=3 好多了

"""

关于python - 使用 Tkinter 时出现致命的 python 错误(pygame 降落伞)段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25997396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com