Como criar um aplicativo GUI de plataforma cruzada diretamente executável usando o Python?

263

O Python funciona em várias plataformas e pode ser usado para aplicativos da Web e de desktop; portanto, concluo que há uma maneira de compilá-lo em um executável para Mac, Windows e Linux.

O problema é que eu não tenho idéia por onde começar ou como escrever uma GUI com ela, alguém pode lançar alguma luz sobre isso e me indicar a direção certa, por favor?

Teifion
fonte

Respostas:

285

Primeiro, você precisará de uma biblioteca GUI com ligações Python e, em seguida (se desejar), de um programa que converterá seus scripts python em executáveis ​​independentes.

Bibliotecas de GUI de plataforma cruzada com ligações Python (Windows, Linux, Mac)

Claro, existem muitos, mas os mais populares que já vi na natureza são:

A lista completa está em http://wiki.python.org/moin/GuiProgramming

Único executável (todas as plataformas)

  • PyInstaller - o mais ativo (também pode ser usado com PyQt)
  • fbs - se você escolheu Qt acima

Único executável (Windows)

  • py2exe - costumava ser o mais popular

Único executável (Linux)

  • Freeze - funciona da mesma maneira que o py2exe, mas tem como alvo a plataforma Linux

Único executável (Mac)

  • py2app - novamente, funciona como py2exe, mas tem como alvo o Mac OS
lubos hasko
fonte
19
Fale sobre o pyinstaller para Windows, em vez do py2exe.
Changelog
8
Vale ressaltar que a partir de 4,5 QT estará sob a LGPL.
CTT
14
... e é por isso que agora você deve considerar o PySide, que é LGPL. Também é mais Pythonic do que a API Python 2 do PyQt4.
Chris Morgan
4
Você também pode adicionar o cx_Freeze , que é multiplataforma, mantido e oferece suporte ao Python 3.x.
Fbmd
2
Por que não há menção a Kivy aqui? Não é uma opção válida para esta pergunta?
SilSur
56

Outro sistema (ainda não mencionado na resposta aceita) é o PyInstaller, que funcionou para um projeto meu do PyQt quando o py2exe não o faria. Eu achei mais fácil de usar.

http://www.pyinstaller.org/

O Pyinstaller é baseado no Instalador Python de Gordon McMillan. O que não está mais disponível.

Jamie
fonte
1
E mais de três anos após a resposta ter sido escrita, o pyinstaller STILL não suporta o Python 3, nem está listado no roteiro de versões futuras. Quero dizer, o suporte ao AIX e ao Solaris é realmente mais útil que o Python 3?
Dave
11
Ele suporta Python 2.7 e Python 3.3, 3.4 e 3.5 agora.
Katu
4
E 3.6 também agora.
Rexcirus 14/10
14

Uma ferramenta alternativa ao py2exe é o bbfreeze, que gera executáveis ​​para Windows e Linux. É mais recente que o py2exe e manipula os ovos muito bem. Descobri que funciona magicamente melhor sem configuração para uma ampla variedade de aplicativos.

Michael Twomey
fonte
11

Há também o PyGTK , que é basicamente um wrapper Python para o Gnome Toolkit. Eu achei mais fácil entender o que o Tkinter, vindo de praticamente nenhum conhecimento de programação GUI anteriormente. Funciona muito bem e tem alguns bons tutoriais. Infelizmente, ainda não existe um instalador para o Python 2.6 para Windows e pode não ser por um tempo.

Tofystedeth
fonte
6

Como o python está instalado em quase todos os sistemas operacionais não Windows por padrão agora, a única coisa de que você realmente precisa é ter certeza de que todas as bibliotecas não padrão que você usa estão instaladas.

Dito isto, é possível criar executáveis ​​que incluem o interpretador python e quaisquer bibliotecas que você usa. Isso provavelmente criará um executável grande, no entanto.

O MacOS X ainda inclui suporte no Xcode IDE para criar aplicativos GUI independentes completos. Eles podem ser executados por qualquer usuário executando o OS X.

Matthew Schinckel
fonte
6

Para a própria GUI:

PyQT é praticamente a referência.

Outra maneira de desenvolver uma interface rápida do usuário é escrever um aplicativo Web, executá-lo localmente e exibir o aplicativo no navegador.

Além disso, se você optar pela opção Tkinter sugerida por lubos hasko, tente o portablepy para que seu aplicativo seja executado no ambiente Windows sem o Python.

fulmicoton
fonte
4

Não tenho certeza se essa é a melhor maneira de fazer isso, mas quando estou implantando aplicativos GUI Ruby (não Python, mas com o mesmo "problema" no que diz respeito a .exe) no Windows, basta escrever um iniciador curto em C # que chama meu script principal. Ele é compilado em um executável e, em seguida, tenho um aplicativo executável.

Brian Warshaw
fonte
@Brian Você viu a técnica de _why para aplicativos de execução automática de sapatos? Provavelmente isso poderia ser feito com programas que não sejam sapatos.
Adam Lassek 18/08/08
Para esses aplicativos, nenhum dos meus usuários é anônimo. Eu sei se eles têm o tempo de execução e, se não tiverem, posso instalá-lo para eles. A principal preocupação neste tópico é como iniciar esses aplicativos sem precisar abrir um prompt de comandos e digitar o executável do tempo de execução, seguido pelo nome do programa.
precisa
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

Então você deve usar py2exe, por exemplo, para trazer em uma pasta todos os arquivos necessários para executar o aplicativo, mesmo que o usuário não possua python no PC (estou falando do Windows ... para o sistema operacional da Apple, não há necessidade de um arquivo executável, eu acho, como ele vem com python, sem a necessidade de instalá-lo.

Crie este arquivo

1) Crie um setup.py

com este código:

from distutils.core import setup
import py2exe

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

salve-o em uma pasta

2) Coloque seu programa na mesma pasta de setup.py, coloque nesta pasta o programa que você deseja torná-lo distribuível: es: l4h.py

ps: altere o nome do arquivo (de l4h para o que você quiser, por exemplo)

3) Execute o cmd a partir dessa pasta (na pasta, clique com o botão direito do mouse + shift e escolha iniciar o cmd aqui)
4) escreva em cmd:> python setup.py py2exe
5) na pasta dist, existem todos os arquivos que você precisa
6) você pode compactá-lo e distribuí-lo

Pyinstaller

Instale-o no cmd

**

pip install pyinstaller

**

Execute-o a partir do cmd da pasta em que o arquivo está

**

pyinstaller file.py

**

Giovanni G. PY
fonte
2

O PySimpleGUI envolve o tkinter e trabalha no Python 3 e 2.7. Também roda em Qt, WxPython e em um navegador da web, usando o mesmo código fonte para todas as plataformas.

Você pode criar GUIs personalizadas que utilizam todos os mesmos widgets encontrados no tkinter (controles deslizantes, caixas de seleção, botões de opção, ...). O código tende a ser muito compacto e legível.

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

Imagem criada a partir do código PySimpleGUI publicado

Conforme explicado na documentação do PySimpleGUI , para criar o arquivo .exe executado:

pyinstaller -wF MyGUIProgram.py

MikeyB
fonte
1

Você não precisa compilar python para Mac / Windows / Linux. É uma linguagem interpretada, então você simplesmente precisa ter o interpretador Python instalado no sistema de sua escolha (ele está disponível para todas as três plataformas).

Quanto a uma biblioteca GUI que funciona em várias plataformas, a biblioteca de widgets Tk / Tcl do Python funciona muito bem, e acredito que seja suficientemente entre plataformas.

Tkinter é a interface python para Tk / Tcl

Na página do projeto python:

O Tkinter não é o único kit de ferramentas GuiProgramming para Python. No entanto, é o mais usado e quase o único portátil entre o Unix, Mac e Windows

Justin Standard
fonte
4
Então, como você faria um pacote de instalação para implantar em sistemas de pessoas que desejam apenas uma instalação em uma etapa (por exemplo, clique duas vezes em um único pacote de instalação no Windows)?
22740 Craig McQueen
Para isso, conheço algumas abordagens: você provavelmente escreveria um instalador em script em lote ou compilado para o sistema de destino, que descartaria os arquivos necessários em algum lugar e instalaria as bibliotecas e tempos de execução necessários no processo.
Justin Padrão
1
Instalar o Python como parte de sua própria instalação seria um pouco complicado, porque você teria que lidar com a possibilidade de a versão errada do Python já estar instalada. Você precisaria instalar lado a lado, para que seu aplicativo pudesse acessar a versão recém-instalada do Python, mas todos os aplicativos existentes continuaram a usar a versão antiga do Python. (ou seja, sem estragar coisas como a associação .py arquivo ou o caminho)
Jonathan Hartley
É mais provável que o instalador verifique a existência da versão correta do Python e, se a encontrar, use-a; caso contrário, instale o python como parte do processo de instalação.
Justin Padrão
Certo - mas a segunda opção 'instalar o python como parte do processo de instalação' é exatamente o que estou falando. Isso seria complicado, pelas razões que dei.
Jonathan Hartley
0

Você pode usar appJarpara o desenvolvimento básico da 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 ao executar

Consulte a documentação no site appJar .

A instalação é feita a pip install appjarpartir da linha de comando.

shahar_m
fonte
0

!!! KIVY !!!

Fiquei espantado ao ver que ninguém mencionou Kivy !!!

Certa vez, eu fiz um projeto usando o Tkinter, embora eles defendam que ele melhorou muito, ainda me dá uma sensação do Windows 98, então mudei para o Kivy .

Eu tenho seguido uma série de tutoriais, se isso ajuda ...

Apenas para ter uma idéia de como o kivy se parece, veja isto (O projeto no qual estou trabalhando):

O projeto em que estou trabalhando

E estou trabalhando nisso há apenas uma semana! Os benefícios para Kivy você pergunta? Verifique isto

A razão pela qual escolhi isso é a aparência e o fato de poder ser usado também em dispositivos móveis.

Ritveak
fonte