我如何使用Python创build一个可直接执行的跨平台GUI应用程序?
Python可以在多个平台上工作,可以用于桌面和Web应用程序,因此我得出结论:有一些方法可以将它编译为Mac,Windows和Linux的可执行文件。
问题是我不知道从哪里开始,或者如何用它来编写一个graphics用户界面,有没有人可以点亮这个,并指出我在正确的方向吗?
首先,你将需要一些带有Python绑定的GUI库,然后(如果你需要)一些将你的Python脚本转换为独立可执行文件的程序。
使用Python绑定的跨平台GUI库(Windows,Linux,Mac)
当然,有很多,但是我在野外看到的最受欢迎的是:
- Tkinter – 基于Tk GUI工具包 (实际上是针对python的标准GUI库,免费用于商业项目)
- WxPython – 基于WxWidgets (非常stream行,免费用于商业项目)
- PyQt – 基于Qt (也比WxWidgets更受欢迎,也更稳定,但是对于商业项目来说代价昂贵)
完整列表在http://wiki.python.org/moin/GuiProgramming
单个可执行文件(Windows)
- py2exe – 可能是最受欢迎的( PyInstaller也越来越受欢迎)
单个可执行文件(Linux)
- 冻结 – 像py2exe一样工作,但是以Linux平台为目标
单个可执行文件(Mac)
- py2app – 再次,像py2exe的工作,但目标的Mac OS
另一个系统(在接受的答案中没有提到)是PyInstaller,它在py2exe不工作时用于我的PyQt项目。 我发现它更容易使用。
Pyinstaller基于Gordon McMillan的Python安装程序。 哪些不再可用。
py2exe的替代工具是bbfreeze ,它为windows和linux生成可执行文件。 它比py2exe更新,处理鸡蛋相当好。 我发现它神奇地工作更好,没有configuration为各种各样的应用程序。
还有PyGTK ,它基本上是Gnome Toolkit的Python包装器。 我发现比Tkinter更容易包装我的头脑,几乎没有以前的GUI编程知识。 它工作得很好,并有一些很好的教程。 不幸的是,目前还没有针对Windows 2.6的Python 2.6安装程序,可能暂时还没有。
由于python默认安装在几乎所有的非Windows操作系统上,所以你唯一需要确定的就是安装了所有的非标准库。
话虽如此,可以构build包含python解释器的可执行文件以及您使用的任何库。 但是,这可能会创build一个大的可执行文件。
MacOS X甚至在Xcode IDE中支持创build完整的独立GUI应用程序。 这些可以由运行OS X的任何用户运行。
我不确定这是做到这一点的最好方法,但是当我在Windows上部署Ruby GUI应用程序(不是Python,但与.exe有相同的“问题”)时,我只是写一个C#中的短启动程序调用我的主脚本。 它编译成一个可执行文件,然后我有一个应用程序可执行文件。
对于GUI本身:
PyQT是非常多的参考。
开发快速用户界面的另一种方法是编写一个Web应用程序,让它在本地运行并在浏览器中显示该应用程序。
此外,如果您select由lubos hasko提供的Tkinter选项,则可能需要尝试使用portablepy将您的应用程序在没有Python的Windows环境下运行。
你不需要为Mac / Windows / Linux 编译 python。 它是一种解释型语言,所以你只需要在你select的系统上安装Python解释器(它可用于所有三个平台)。
至于跨平台的GUI库,Python的Tk / Tcl构件库工作得很好,我相信这是足够跨平台的。
Tkinter是Tk / Tcl的Python接口
从python项目网页:
Tkinter并不是Python的唯一GuiProgramming工具包。 不过它是最常用的,几乎是Unix,Mac和Windows之间唯一可移植的
# I'd use tkinter for python 3 import tkinter tk = tkinter.Tk() tk.geometry("400x300+500+300") l = Label(tk,text="") l.pack() e = Entry(tk) e.pack() def click(): e['text'] = 'You clicked the button' b = Button(tk,text="Click me",command=click) b.pack() tk.mainloop() # After this I would you py2exe # search for the use of this module on stakoverflow # otherwise I could edit this to let you know how to do it
您可以使用appJar
进行基本的GUI开发。
from appJar import gui num=1 def myfcn(btnName): global num num +=1 win.setLabel("mylabel", num) win = gui('Test') win.addButtons(["Set"], [myfcn]) win.addLabel("mylabel", "Press the Button") win.go()
在appJar网站查看文档。
使用命令行pip install appjar
进行pip install appjar
。