代码之家  ›  专栏  ›  技术社区  ›  Teifion

如何使用python创建直接可执行的跨平台GUI应用程序?

  •  237
  • Teifion  · 技术社区  · 16 年前

    python在多个平台上工作,可以用于桌面和Web应用程序,因此我得出结论,有一些方法可以将它编译成Mac、Windows和Linux的可执行文件。

    问题是我不知道从哪里开始,也不知道如何用它编写一个图形用户界面,有人能给我一点启发,然后把我指向正确的方向吗?

    11 回复  |  直到 6 年前
        1
  •  248
  •   community wiki 13 revs, 4 users 74% lubos hasko    6 年前

    首先,您需要一些带有Python绑定的GUI库,然后(如果需要)一些将您的Python脚本转换为独立可执行文件的程序。

    具有Python绑定的跨平台GUI库(Windows、Linux、Mac)

    当然,有很多,但我在野外看到的最流行的是:

    完整列表位于 http://wiki.python.org/moin/GuiProgramming

    单个可执行文件(所有平台)

    单个可执行文件(Windows)

    单个可执行文件(Linux)

    • Freeze -工作方式与py2exe相同,但目标是Linux平台

    单个可执行文件(Mac)

    • py2app -同样,工作方式类似于py2exe,但目标是mac操作系统
        2
  •  50
  •   Jace Browning    13 年前

    另一个系统(在接受的答案中还没有提到)是PyInstaller,它在Py2Exe不工作时为我的Pyqt项目工作。我发现它更容易使用。

    http://www.pyinstaller.org/

    pyinstaller基于GordonMcMillan的python安装程序。它不再可用。

        3
  •  14
  •   e-satis    16 年前

    Py2Exe的另一个替代工具是 bbfreeze 它为Windows和Linux生成可执行文件。它比PY2Exe更新,而且处理鸡蛋很好。我发现,如果没有对各种应用程序进行配置,它可以神奇地更好地工作。

        4
  •  11
  •   Tofystedeth    16 年前

    还有 PyGTK 它基本上是GNOME工具包的Python包装器。我发现,比起Tkinter,我更容易集中思想,因为以前对GUI编程几乎一无所知。它工作得很好,有一些很好的教程。不幸的是,目前还没有针对Windows的python 2.6的安装程序,可能暂时还没有。

        5
  •  6
  •   Matthew Schinckel    16 年前

    由于现在几乎每个非Windows操作系统上都安装了python,所以您真正需要确保的是,您使用的所有非标准库都已安装。

    尽管如此,还是有可能构建包含Python解释器和您使用的任何库的可执行文件。然而,这可能会创建一个大型的可执行文件。

    MacOSX甚至在Xcode IDE中提供了创建完全独立的GUI应用程序的支持。这些可以由运行OS X的任何用户运行。

        6
  •  5
  •   fulmicoton    16 年前

    对于GUI本身:

    PyQT 几乎就是参考。

    开发快速用户界面的另一种方法是编写Web应用程序, 让它在本地运行并在浏览器中显示应用程序。

    另外,如果你选择Lubos Hasko建议的tkinter选项 您可能希望尝试使用Portablepy在Windows环境中运行应用程序。 没有蟒蛇。

        7
  •  4
  •   sergtk    16 年前

    我不确定这是最好的方法,但是当我在Windows上部署Ruby GUI应用程序(不是python,但与.exe有相同的“问题”)时,我只是用C语言编写了一个简短的启动程序,调用我的主脚本。它编译成一个可执行文件,然后我有一个应用程序可执行文件。

        8
  •  2
  •   PythonProgrammi    6 年前
    # 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
    

    PY2EXE

    例如,您应该使用py2exe将运行应用程序所需的所有文件放入一个文件夹,即使用户的PC上没有python(我指的是Windows……对于苹果操作系统,我认为不需要一个可执行文件,因为它附带了Python,不需要安装它。

    创建此文件

    1)创建setup.py

    用这个代码:

    from distutils.core import setup
    import py2exe
    
    setup(console=['l4h.py'])
    

    将其保存到文件夹中

    2)将程序放在setup.py的同一文件夹中。 将要分发的程序放入此文件夹: E: L4H.Py

    ps:更改文件名(从l4h更改为您想要的任何文件,这是一个示例)

    3)从该文件夹中运行cmd(在该文件夹上,右键单击+shift并选择此处的start cmd)。
    4)写入命令:>python setup.py py2exe
    5)在dist文件夹中,有您需要的所有文件
    6)您可以将其压缩并分发

    Py安装程序

    从命令安装

    **

    pip安装pyinstaller

    **

    从文件所在文件夹的命令运行

    **

    pyinstaller文件.py

    **

        9
  •  1
  •   Justin Standard    16 年前

    你不需要 编译 用于Mac/Windows/Linux的python。它是一种解释语言,因此您只需在您选择的系统上安装Python解释器(它适用于所有三个平台)。

    对于跨平台工作的GUI库,python的 Tk/Tcl 小部件库工作得很好,我相信它是足够跨平台的。

    Tkinter 是到tk/tcl的python接口吗

    从python项目网页:

    tkinter不是唯一的guiprogramming python工具包。但是它是 最常用的一种,几乎是 只有一个可以在 Unix、Mac和Windows

        10
  •  1
  •   Mike from PSG    6 年前

    pysimplegui包装了tkinter并在python 3和2.7上工作。您可以使用在tkinter中找到的所有相同的小部件(滑块、复选框、单选按钮等)制作自定义gui。代码往往非常紧凑和可读。

    #!/usr/bin/env python
    import sys
    if sys.version_info[0] >= 3:
        import PySimpleGUI as sg
    else:
        import PySimpleGUI27 as sg
    
    layout = [[ sg.Text('My Window') ],
              [ sg.Button('OK')]]
    
    window = sg.Window('My window').Layout(layout)
    button, value = window.Read()
    

    Image created from posted PySimpleGUI code

    如中所述 PySimpleGUI Documentation ,为了 build the .EXE file 你跑:

    PyInstaller-wf myguiprogram.py版

        11
  •  0
  •   Dawn    7 年前

    你可以使用 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()
    

    GUI when running

    参见文档 appJar site .

    安装时使用 pip install appjar 来自命令行。