我在64位编译总是遇到问题,所以采用32位python编译的方式,生成的exe可以在64位和32位电脑上顺利执行。
但是现在多数电脑都是64位的,可以参考http://blog.csdn.net/shouwangzhelv/article/details/50814006在64位电脑上进行32位程序编译而不影响原来的python程序。
1、使用glade生成界面的XML文件
关于gtk+glade使用你可以参考http://www.gnipsel.com/glade/index.html(英文),或者可以参考http://blog.csdn.net/xbwee/article/details/4032652这篇中文文章,该博主翻译了前三部分glade的使用,足够你写出简单的界面,我参考了这篇中文博客。
用glade生成界面后把界面另存为一份name.xml文件和一份name.glade文件。(后面xml文件交给生成界面程序使用,glade文件交给py2exe使用)
生成的xml文件(tutorial.xml):
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="window">
<property name="title" translatable="yes">GTK+ Text Editor</property>
<signal name="destroy" handler="on_window_destroy"/>
<child>
<placeholder/>
</child>
</object>
</interface>
生成的glade文件(基本一样的)
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="window">
<property name="title" translatable="yes">GTK+ Text Editor</property>
<signal name="destroy" handler="on_window_destroy"/>
<child>
<placeholder/>
</child>
</object>
</interface>
2、使用gtk模块写生成GUI的py脚本handtool.py
#coding:utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8')import pygtkpygtk.require("2.0")import gtkimport os
#这里xml文件使用相对路径,后面会对此进行说明
basepath=os.getcwd()
运行这段代码,就可以看到GUI界面了xmlpath=basepath+r'\tutorial.xml'class TutorialApp(object): def __init__(self): builder = gtk.Builder() builder.add_from_file(xmlpath) builder.connect_signals({ "on_window_destroy" : gtk.main_quit }) self.window = builder.get_object("window") self.window.show()if __name__ == "__main__": app = TutorialApp() gtk.main()
3、把写好的代码转化成exe文件
写一个setup.py文件:
from distutils.core import setup
import py2exe
import os
import sys
# Find GTK+ installation path
__import__('gtk')
m = sys.modules['gtk']
gtk_base_path = m.__path__[0]
setup(
name = 'handytool',
description = 'Some handy tool',
version = '1.0',
windows = [
{
'script': 'handtool.py',
#'icon_resources': [(1, "handytool.ico")],
}
],
options = {
'py2exe': {
'packages':'encodings',
# Optionally omit gio, gtk.keysyms, and/or rsvg if you're not using them
'includes': 'cairo, pango, pangocairo, atk, gobject, gio, gtk.keysyms, rsvg',
}
},
data_files=[
r'C:\handytool.glade',
#'readme.txt',
# If using GTK+'s built in SVG support, uncomment these
#os.path.join(gtk_base_path, '..', 'runtime', 'bin', 'gdk-pixbuf-query-loaders.exe'),
#os.path.join(gtk_base_path, '..', 'runtime', 'bin', 'libxml2-2.dll'),
]
)
然后python运行setup.py即可: python setup.py py2exe
执行完毕后会生成两个文件夹build和dist,然后把你用到的xml文件放到dist文件夹下,这就上面为什么用相对路径,这样你把这两个文件夹拷贝到哪里都可以正常运行。可执行文件在dist文件夹下。
关于生成的exe文件的兼容性:exe依赖于系统环境,目前测试win7,10都可正常运行,xp不能执行,xp
系统C:Windows\system32中的msvcrt.dll和后来的系统不同,使用win7等系统的msvcrt.dll替换后可正常使用
关于bug:程序使用的错误信息会存储在dist目录下YourExeName.exe.log文件中,可做调试参考