Comment puis-je créer une application GUI multiplateforme directement exécutable à l'aide de Python?

263

Python fonctionne sur plusieurs plates-formes et peut être utilisé pour les applications de bureau et Web, donc je conclus qu'il existe un moyen de le compiler en un exécutable pour Mac, Windows et Linux.

Le problème étant que je n'ai aucune idée par où commencer ou comment écrire une interface graphique avec elle, quelqu'un peut-il éclairer cela et me diriger dans la bonne direction s'il vous plaît?

Teifion
la source

Réponses:

285

Tout d'abord, vous aurez besoin d'une bibliothèque GUI avec des liaisons Python, puis (si vous le souhaitez) d'un programme qui convertira vos scripts python en exécutables autonomes.

Bibliothèques GUI multiplateformes avec liaisons Python (Windows, Linux, Mac)

Bien sûr, il y en a beaucoup, mais les plus populaires que j'ai vues dans la nature sont:

  • Tkinter - basé sur Tk GUI toolkit (bibliothèque GUI standard de facto pour python, gratuite pour les projets commerciaux)
  • WxPython - basé sur WxWidgets (populaire, gratuit pour les projets commerciaux)
  • Qt en utilisant les liaisons PyQt ou Qt pour Python . Le premier n'est pas gratuit pour les projets commerciaux. Ce dernier est moins mature, mais peut être utilisé gratuitement.

La liste complète se trouve à http://wiki.python.org/moin/GuiProgramming

Exécutable unique (toutes les plateformes)

  • PyInstaller - le plus actif (pourrait également être utilisé avec PyQt)
  • fbs - si vous avez choisi Qt ci-dessus

Exécutable unique (Windows)

  • py2exe - était le plus populaire

Exécutable unique (Linux)

  • Geler - fonctionne de la même manière que py2exe mais cible la plate-forme Linux

Exécutable unique (Mac)

  • py2app - encore une fois, fonctionne comme py2exe mais cible Mac OS
lubos hasko
la source
19
Parlez de pyinstaller pour Windows, au lieu de py2exe.
changelog
8
Il convient de noter qu'à partir de 4,5 QT sera sous LGPL.
CTT
14
... c'est pourquoi vous devriez maintenant envisager d'utiliser PySide, qui est LGPL. Il est également plus Pythonic que l'API Python 2 de PyQt4.
Chris Morgan
4
Vous pouvez également ajouter cx_Freeze , qui est multiplateforme, maintenu et prend en charge Python 3.x.
fbmd
2
Pourquoi n'y a-t-il aucune mention de Kivy ici? N'est-ce pas une option valable pour cette question?
SilSur
56

Un autre système (non encore mentionné dans la réponse acceptée) est PyInstaller, qui a fonctionné pour un de mes projets PyQt alors que py2exe ne le ferait pas. Je l'ai trouvé plus facile à utiliser.

http://www.pyinstaller.org/

Pyinstaller est basé sur l'installateur Python de Gordon McMillan. Qui n'est plus disponible.

Jamie
la source
1
Et plus de 3 ans après que cette réponse a été écrite, pyinstaller STILL ne prend pas en charge Python 3, ni n'est répertorié dans la feuille de route des futures versions. Je veux dire, le support AIX et Solaris est-il vraiment plus utile que Python 3?
Dave
11
Il prend désormais en charge Python 2.7 et Python 3.3, 3.4 et 3.5.
Katu
4
Et 3.6 aussi maintenant.
Rexcirus
14

Un outil alternatif à py2exe est bbfreeze qui génère des exécutables pour Windows et Linux. Il est plus récent que py2exe et gère très bien les œufs. J'ai trouvé que cela fonctionne magiquement mieux sans configuration pour une grande variété d'applications.

Michael Twomey
la source
11

Il y a aussi PyGTK , qui est essentiellement un wrapper Python pour Gnome Toolkit. J'ai trouvé plus facile de me faire une idée que Tkinter, car je ne connaissais pas la programmation GUI auparavant. Cela fonctionne assez bien et propose de bons tutoriels. Malheureusement, il n'y a pas encore de programme d'installation pour Python 2.6 pour Windows, et peut-être pas avant un certain temps.

Tofystedeth
la source
6

Étant donné que python est installé sur presque tous les systèmes d'exploitation non Windows par défaut maintenant, la seule chose dont vous devez vraiment vous assurer est que toutes les bibliothèques non standard que vous utilisez sont installées.

Cela dit, il est possible de créer des exécutables qui incluent l'interpréteur python et toutes les bibliothèques que vous utilisez. Cependant, cela est susceptible de créer un grand exécutable.

MacOS X inclut même la prise en charge dans l'IDE Xcode pour la création d'applications GUI autonomes complètes. Ceux-ci peuvent être exécutés par n'importe quel utilisateur exécutant OS X.

Matthew Schinckel
la source
6

Pour l'interface graphique elle-même:

PyQT est à peu près la référence.

Une autre façon de développer une interface utilisateur rapide consiste à écrire une application Web, à la faire exécuter localement et à afficher l'application dans le navigateur.

De plus, si vous optez pour l'option Tkinter suggérée par lubos hasko, vous voudrez peut-être essayer portablepy pour que votre application s'exécute sur l'environnement Windows sans Python.

fulmicoton
la source
4

Je ne suis pas sûr que ce soit la meilleure façon de le faire, mais quand je déploie des applications GUI Ruby (pas Python, mais a le même "problème" en ce qui concerne les fichiers .exe) sous Windows, j'écris juste un lanceur court en C # qui fait appel à mon script principal. Il se compile en un exécutable, et j'ai ensuite un exécutable d'application.

Brian Warshaw
la source
@Brian Avez-vous vu la technique de _why pour les applications Chaussures auto- exécutables ? Cela pourrait probablement être fait avec des programmes autres que Chaussures.
Adam Lassek
Pour ces applications, aucun de mes utilisateurs n'est anonyme. Je sais s'ils ont le runtime, et s'ils ne le font pas, je peux l'installer pour eux. La principale préoccupation de cette rubrique est de savoir comment lancer ces applications sans avoir à ouvrir une invite de commande et taper l'exécutable du runtime suivi du nom du programme.
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

Ensuite, vous devriez utiliser py2exe, par exemple, pour rassembler dans un dossier tous les fichiers nécessaires pour exécuter l'application, même si l'utilisateur n'a pas python sur son PC (je parle de windows ... pour le apple os il n'y a pas besoin d'un fichier exécutable, je pense, car il est livré avec python sans avoir besoin de l'installer.

Créez ce fichier

1) Créez un setup.py

avec ce code:

from distutils.core import setup
import py2exe

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

enregistrez-le dans un dossier

2) Mettez votre programme dans le même dossier que setup.py mettez dans ce dossier le programme que vous souhaitez rendre distribuable: es: l4h.py

ps: changez le nom du fichier (de l4h à tout ce que vous voulez, c'est un exemple)

3) Exécutez cmd à partir de ce dossier (sur le dossier, faites un clic droit + Maj et choisissez démarrer cmd ici)
4) écrivez dans cmd:> python setup.py py2exe
5) dans le dossier dist il y a tous les fichiers dont vous avez besoin
6) vous peut le compresser et le distribuer

Pyinstaller

Installez-le depuis cmd

**

pip installer pyinstaller

**

Exécutez-le à partir du cmd depuis le dossier où se trouve le fichier

**

pyinstaller file.py

**

Giovanni G. PY
la source
2

PySimpleGUI encapsule tkinter et fonctionne sur Python 3 et 2.7. Il fonctionne également sur Qt, WxPython et dans un navigateur Web, en utilisant le même code source pour toutes les plateformes.

Vous pouvez créer des interfaces graphiques personnalisées qui utilisent tous les mêmes widgets que vous trouvez dans tkinter (curseurs, cases à cocher, boutons radio, ...). Le code a tendance à être très compact et lisible.

#!/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 créée à partir du code PySimpleGUI publié

Comme expliqué dans la documentation PySimpleGUI , pour créer le fichier .EXE que vous exécutez:

pyinstaller -wF MyGUIProgram.py

MikeyB
la source
1

Vous n'avez pas besoin de compiler python pour Mac / Windows / Linux. Il s'agit d'un langage interprété, vous devez donc simplement installer l'interpréteur Python sur le système de votre choix (il est disponible pour les trois plates-formes).

En ce qui concerne une bibliothèque GUI qui fonctionne multiplateforme, la bibliothèque de widgets Tk / Tcl de Python fonctionne très bien, et je pense qu'elle est suffisamment multiplateforme.

Tkinter est l'interface python de Tk / Tcl

Depuis la page Web du projet python:

Tkinter n'est pas la seule boîte à outils GuiProgramming pour Python. C'est cependant le plus couramment utilisé, et presque le seul qui soit portable entre Unix, Mac et Windows

Justin Standard
la source
4
Alors, comment feriez-vous un package d'installation à déployer sur des systèmes de personnes qui veulent juste une installation en une étape (par exemple, double-cliquez sur un seul package d'installation dans Windows)?
Craig McQueen
Pour cela, il existe quelques approches que je connais: vous écririez probablement un programme d'installation dans un script par lots ou compilé pour le système cible qui supprimerait les fichiers nécessaires quelque part et installerait les bibliothèques et les temps d'exécution nécessaires dans le processus.
Justin Standard
1
Installer Python dans le cadre de votre propre installation serait un peu compliqué, car vous auriez à faire face à la possibilité que la mauvaise version de Python soit déjà installée. Vous devez installer côte à côte, de sorte que votre application puisse accéder à la version nouvellement installée de Python, mais toutes les applications existantes continuent d'utiliser l'ancienne version de Python. (c'est-à-dire sans gâcher des choses comme l'association de fichiers .py ou le PATH)
Jonathan Hartley
Il est plus probable que votre programme d'installation vérifie l'existence de la bonne version de Python et s'il la trouve, utilisez-la, sinon installez python dans le cadre du processus d'installation.
Justin Standard
Exact - mais cette deuxième option «sinon installez python dans le cadre du processus d'installation», c'est exactement ce dont je parle. Ce serait compliqué, pour les raisons que j'ai données.
Jonathan Hartley
0

Vous pouvez utiliser appJarpour le développement de base de l'interface graphique.

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 lors de l'exécution

Voir la documentation sur le site appJar .

L'installation se fait à pip install appjarpartir de la ligne de commande.

shahar_m
la source
0

!!! KIVY !!!

J'ai été étonné de voir que personne n'a mentionné Kivy !!!

J'ai déjà fait un projet en utilisant Tkinter, bien qu'ils préconisent qu'il s'est beaucoup amélioré, cela me donne toujours une idée de Windows 98, alors je suis passé à Kivy .

J'ai suivi une série de tutoriels si cela peut aider ...

Juste pour donner une idée de l'apparence de Kivy, voyez ceci (Le projet sur lequel je travaille):

Le projet sur lequel je travaille

Et j'y travaille depuis à peine une semaine! Les avantages pour Kivy que vous demandez? Vérifiez ceci

La raison pour laquelle j'ai choisi cela, c'est son look et qu'il peut également être utilisé sur mobile.

Ritveak
la source