¿Cómo puedo crear una aplicación GUI multiplataforma directamente ejecutable usando Python?

263

Python funciona en múltiples plataformas y se puede usar para aplicaciones de escritorio y web, por lo que concluyo que hay alguna forma de compilarlo en un ejecutable para Mac, Windows y Linux.

El problema es que no tengo idea de por dónde empezar o cómo escribir una GUI con él, ¿alguien puede arrojar algo de luz sobre esto y señalarme en la dirección correcta, por favor?

Teifion
fuente

Respuestas:

285

Primero necesitará una biblioteca GUI con enlaces de Python y luego (si lo desea) algún programa que convierta sus scripts de Python en ejecutables independientes.

Bibliotecas GUI multiplataforma con enlaces de Python (Windows, Linux, Mac)

Por supuesto, hay muchos, pero los más populares que he visto en estado salvaje son:

  • Tkinter : basado en el kit de herramientas Tk GUI (biblioteca GUI estándar de facto para python, gratuita para proyectos comerciales)
  • WxPython : basado en WxWidgets (popular, gratuito para proyectos comerciales)
  • Qt utilizando los enlaces PyQt o Qt para Python . El primero no es gratuito para proyectos comerciales. Este último es menos maduro, pero se puede usar de forma gratuita.

La lista completa está en http://wiki.python.org/moin/GuiProgramming

Ejecutable único (todas las plataformas)

  • PyInstaller : el más activo (también se puede usar con PyQt)
  • fbs : si elige Qt arriba

Ejecutable único (Windows)

  • py2exe : solía ser el más popular

Ejecutable único (Linux)

  • Congelar : funciona de la misma manera que py2exe pero se dirige a la plataforma Linux

Ejecutable único (Mac)

  • py2app : de nuevo, funciona como py2exe pero se dirige a Mac OS
lubos hasko
fuente
19
Hable sobre pyinstaller para Windows, en lugar de py2exe.
registro de cambios
8
Vale la pena señalar que a partir de 4.5 QT estará bajo la LGPL.
CTT
14
... por eso ahora debería considerar usar PySide, que es LGPL. También es más Pythonic que la API Python 2 de PyQt4.
Chris Morgan
44
También puede agregar cx_Freeze , que es multiplataforma, se mantiene y es compatible con Python 3.x.
fbmd
2
¿Por qué no se menciona a Kivy aquí? ¿No es una opción válida para esta pregunta?
SilSur
56

Otro sistema (aún no mencionado en la respuesta aceptada) es PyInstaller, que funcionó para un proyecto mío de PyQt cuando py2exe no lo haría. Me resultó más fácil de usar.

http://www.pyinstaller.org/

Pyinstaller se basa en el instalador de Python de Gordon McMillan. Que ya no está disponible.

Jamie
fuente
1
Y más de 3 años después de que se escribió esta respuesta, pyinstaller STILL no es compatible con Python 3, ni aparece en la hoja de ruta de futuras versiones. Quiero decir, ¿el soporte de AIX y Solaris es realmente más útil que Python 3?
Dave
11
Es compatible con Python 2.7 y Python 3.3, 3.4 y 3.5 ahora.
Katu
44
Y 3.6 también ahora.
Rexcirus
14

Una herramienta alternativa a py2exe es bbfreeze, que genera ejecutables para Windows y Linux. Es más nuevo que py2exe y maneja los huevos bastante bien. He descubierto que funciona mágicamente mejor sin configuración para una amplia variedad de aplicaciones.

Michael Twomey
fuente
11

También hay PyGTK , que es básicamente un contenedor de Python para Gnome Toolkit. He encontrado que es más fácil comprender mi mente que Tkinter, ya que no conozco previamente la programación de la GUI. Funciona bastante bien y tiene algunos buenos tutoriales. Desafortunadamente, todavía no hay un instalador para Python 2.6 para Windows, y puede que no lo sea por un tiempo.

Tofystedeth
fuente
6

Dado que Python está instalado en casi todos los sistemas operativos que no son Windows de forma predeterminada, lo único que realmente debe asegurarse es que todas las bibliotecas no estándar que utiliza estén instaladas.

Dicho esto, es posible crear ejecutables que incluyan el intérprete de Python y cualquier biblioteca que use. Sin embargo, es probable que esto cree un gran ejecutable.

MacOS X incluso incluye soporte en Xcode IDE para crear aplicaciones GUI independientes completas. Estos pueden ser ejecutados por cualquier usuario que ejecute OS X.

Matthew Schinckel
fuente
6

Para la GUI en sí:

PyQT es más o menos la referencia.

Otra forma de desarrollar una interfaz de usuario rápida es escribir una aplicación web, hacer que se ejecute localmente y mostrar la aplicación en el navegador.

Además, si opta por la opción Tkinter sugerida por lubos hasko, puede probar portablepy para que su aplicación se ejecute en un entorno Windows sin Python.

fulmicoton
fuente
4

No estoy seguro de que esta sea la mejor manera de hacerlo, pero cuando estoy implementando aplicaciones GUI de Ruby (no Python, pero tiene el mismo "problema" en lo que respecta a .exe) en Windows, solo escribo un Lanzador corto en C # que invoca mi script principal. Se compila en un ejecutable, y luego tengo una aplicación ejecutable.

Brian Warshaw
fuente
@Brian ¿Has visto la técnica de _why para las aplicaciones de zapatos autoejecutables? Probablemente podría hacerse con programas que no sean de zapatos.
Adam Lassek
Para estas aplicaciones, ninguno de mis usuarios es anónimo. Sé si tienen el tiempo de ejecución, y si no lo tienen, puedo instalarlo para ellos. La principal preocupación en este tema es cómo iniciar estas aplicaciones sin tener que abrir un símbolo del sistema y escribir el ejecutable del tiempo de ejecución seguido del nombre del programa.
Brian Warshaw
2
# 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

Luego, debe usar py2exe, por ejemplo, para traer en una carpeta todos los archivos necesarios para ejecutar la aplicación, incluso si el usuario no tiene Python en su PC (estoy hablando de Windows ... para el sistema operativo Apple no es necesario de un archivo ejecutable, creo, ya que viene con python sin necesidad de instalarlo.

Crea este archivo

1) Crear un setup.py

con este código:

from distutils.core import setup
import py2exe

setup(console=['l4h.py'])

guardarlo en una carpeta

2) Coloque su programa en la misma carpeta de setup.py, coloque en esta carpeta el programa que desea que sea distribuible: es: l4h.py

ps: cambia el nombre del archivo (de l4h a lo que quieras, ese es un ejemplo)

3) Ejecute cmd desde esa carpeta (en la carpeta, haga clic derecho + shift y elija iniciar cmd aquí)
4) escriba cmd:> python setup.py py2exe
5) en la carpeta dist hay todos los archivos que necesita
6) usted puede comprimirlo y distribuirlo

Pyinstaller

Instalarlo desde cmd

** **

pip install pyinstaller

** **

Ejecútelo desde el cmd desde la carpeta donde está el archivo

** **

pyinstaller file.py

** **

Giovanni G. PY
fuente
2

PySimpleGUI envuelve tkinter y funciona en Python 3 y 2.7. También se ejecuta en Qt, WxPython y en un navegador web, utilizando el mismo código fuente para todas las plataformas.

Puede crear GUI personalizadas que utilicen los mismos widgets que encuentra en tkinter (controles deslizantes, casillas de verificación, botones de opción, ...). El código tiende a ser muy compacto y legible.

#!/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()

Imagen creada a partir del código PySimpleGUI publicado

Como se explica en la documentación de PySimpleGUI , para compilar el archivo .EXE que ejecuta:

pyinstaller -wF MyGUIProgram.py

MikeyB
fuente
1

No necesitas compilar python para Mac / Windows / Linux. Es un lenguaje interpretado, por lo que simplemente necesita tener el intérprete de Python instalado en el sistema que elija (está disponible para las tres plataformas).

En cuanto a una biblioteca GUI que funciona multiplataforma, la biblioteca de widgets Tk / Tcl de Python funciona muy bien, y creo que es suficientemente multiplataforma.

Tkinter es la interfaz de Python para Tk / Tcl

Desde la página web del proyecto Python:

Tkinter no es el único kit de herramientas GuiProgramming para Python. Sin embargo, es el más utilizado y casi el único que es portátil entre Unix, Mac y Windows.

Justin Standard
fuente
44
Entonces, ¿cómo haría un paquete de instalación para implementarlo en sistemas de personas que solo desean una instalación de 1 paso (por ejemplo, haga doble clic en un solo paquete de instalación en Windows)?
Craig McQueen el
Para eso hay algunos enfoques que conozco: es probable que escriba un instalador en un script por lotes o compilado para el sistema de destino que colocaría los archivos necesarios en algún lugar e instalaría las bibliotecas y tiempos de ejecución necesarios en el proceso.
Justin Standard
1
Instalar Python como parte de su propia instalación sería un poco complicado, ya que tendría que lidiar con la posibilidad de que la versión incorrecta de Python ya esté instalada. Tendría que instalar uno al lado del otro, de modo que su aplicación pudiera acceder a la versión recién instalada de Python, pero las aplicaciones existentes continuaron utilizando la versión anterior de Python. (es decir, sin estropear cosas como la asociación de archivos .py o la RUTA)
Jonathan Hartley
Lo más probable es que su instalador verifique la existencia de la versión correcta de Python, y si la encuentra, úsela, de lo contrario, instale python como parte del proceso de instalación.
Justin Standard
Correcto, pero esa segunda opción 'instalar Python como parte del proceso de instalación', es exactamente de lo que estoy hablando. Eso sería complicado, por las razones que di.
Jonathan Hartley
0

Puede usar appJarpara el desarrollo básico de 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 cuando se ejecuta

Ver documentación en el sitio appJar .

La instalación se realiza pip install appjardesde la línea de comandos.

shahar_m
fuente
0

!!! KIVY !!!

¡Me sorprendió ver que nadie mencionaba a Kivy!

Una vez he hecho un proyecto usando Tkinter, aunque recomiendan que haya mejorado mucho, todavía me da la sensación de Windows 98, así que cambié a Kivy .

He estado siguiendo una serie de tutoriales si me ayuda ...

Solo para dar una idea de cómo se ve kivy, mira esto (El proyecto en el que estoy trabajando):

El proyecto en el que estoy trabajando

¡Y llevo trabajando en ello apenas una semana! ¿Los beneficios para Kivy que preguntas? Cheque esto

La razón por la que elegí esto es su aspecto y que también se puede usar en dispositivos móviles.

Ritveak
fuente