1.第一步首先创建Tkinter应用,命名为main.py
import sys
import tkinter as tk
root = tk.Tk()
root.title("Sandwich")
tk.Button(root, text="Make me a Sandwich").pack()
tk.mainloop()
2.安装 py2app
3.创建setup.py文件
py2applet --make-setup main.py
自动生成的setup.py 文件内容为
from setuptools import setup
APP = ['main.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
如果你的应用使用的其他文件,比如 JSON 文件,文本文件,图片等,你应该将他们包含在 DATA_FILES 中。 例如:
DATA_FILES = ['testdata.json', 'picture.png']
4.发布
创建测试版
python setup.py py2app -A
此时对main.py的修改,app会立刻生效
可以通过命令
open dist/main.app 或者 ./dist/main.app/Contents/MacOS/Sandwich
启动
构建发布版应用
确保旧的 build 和 dist 文件类都被删除了:
rm -rf build dist
python setup.py py2app
此时对main.py的修改都要重新打包
5.添加图标
在 OPTIONS 字典中添加 "iconfile": "youricon.icns" 即可:
from setuptools import setup
APP = ['Sandwich.py']
DATA_FILES = []
OPTIONS = {
'argv_emulation': True,
'iconfile': 'app.icns'
}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
你可以在网上找到 icns 格式的图标(例如:IconFinder或者freepik)。
应用高级设置
你可以通过修改 Info.plist 来调用应用的信息各行为。最完整的对可用的键的引用是Apple's Runtime Configuratin Guidelines。
# -*- coding: utf-8 -*-
from setuptools import setup
APP = ['Sandwich.py']
APP_NAME = "SuperSandwich"
DATA_FILES = []
OPTIONS = {
'argv_emulation': True,
'iconfile': 'app.icns',
'plist': {
'CFBundleName': APP_NAME,
'CFBundleDisplayName': APP_NAME,
'CFBundleGetInfoString': "Making Sandwiches",
'CFBundleIdentifier': "com.metachris.osx.sandwich",
'CFBundleVersion': "0.1.0",
'CFBundleShortVersionString': "0.1.0",
'NSHumanReadableCopyright': u"Copyright © 2015, Chris Hager, All Rights Reserved"
}
}
setup(
name=APP_NAME,
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
创建icns图标的方式
创建目录
mkdir test.iconset // 这里后缀必须是 iconset cd test.iconset
执行命令
$ sips -z 16 16 pic.png --out tmp.iconset/icon_16x16.png
$ sips -z 32 32 pic.png --out tmp.iconset/icon_16x16@2x.png // 2x是专供Retina屏幕使用的
$ sips -z 32 32 pic.png --out tmp.iconset/icon_32x32.png
$ sips -z 64 64 pic.png --out tmp.iconset/icon_32x32@2x.png
$ sips -z 128 128 pic.png --out tmp.iconset/icon_128x128.png
$ sips -z 256 256 pic.png --out tmp.iconset/icon_128x128@2x.png
$ sips -z 256 256 pic.png --out tmp.iconset/icon_256x256.png
$ sips -z 512 512 pic.png --out tmp.iconset/icon_256x256@2x.png
$ sips -z 512 512 pic.png --out tmp.iconset/icon_512x512.png
$ sips -z 512 512 pic.png --out tmp.iconset/icon_512x512@2x.png
最后执行
iconutil -c icns tmp.iconset -o app.icns
把app.icns放在main.py目录下,即可。