Wie kann ich mit Python eine direkt ausführbare plattformübergreifende GUI-App erstellen?

263

Python funktioniert auf mehreren Plattformen und kann für Desktop- und Webanwendungen verwendet werden. Daher komme ich zu dem Schluss, dass es eine Möglichkeit gibt, es in eine ausführbare Datei für Mac, Windows und Linux zu kompilieren.

Das Problem ist, dass ich keine Ahnung habe, wo ich anfangen soll oder wie ich eine GUI damit schreiben soll. Kann jemand etwas Licht ins Dunkel bringen und mich bitte in die richtige Richtung weisen?

Teifion
quelle

Antworten:

285

Zuerst benötigen Sie eine GUI-Bibliothek mit Python-Bindungen und dann (wenn Sie möchten) ein Programm, das Ihre Python-Skripte in eigenständige ausführbare Dateien konvertiert.

Plattformübergreifende GUI-Bibliotheken mit Python-Bindungen (Windows, Linux, Mac)

Natürlich gibt es viele, aber die beliebtesten, die ich in freier Wildbahn gesehen habe, sind:

  • Tkinter - basierend auf dem Tk GUI Toolkit (De-facto-Standard-GUI-Bibliothek für Python, kostenlos für kommerzielle Projekte)
  • WxPython - basierend auf WxWidgets (beliebt, kostenlos für kommerzielle Projekte)
  • Qt mit den PyQt-Bindungen oder Qt für Python . Ersteres ist für kommerzielle Projekte nicht kostenlos. Letzteres ist weniger ausgereift, kann aber kostenlos verwendet werden.

Die vollständige Liste finden Sie unter http://wiki.python.org/moin/GuiProgramming

Einzelne ausführbare Datei (alle Plattformen)

  • PyInstaller - der aktivste (Kann auch mit verwendet werden PyQt)
  • fbs - wenn Sie oben Qt gewählt haben

Einzelne ausführbare Datei (Windows)

  • py2exe - war früher das beliebteste

Einzelne ausführbare Datei (Linux)

  • Einfrieren - funktioniert genauso wie py2exe, zielt jedoch auf die Linux-Plattform ab

Einzelne ausführbare Datei (Mac)

  • py2app - funktioniert wieder wie py2exe, zielt jedoch auf Mac OS ab
lubos hasko
quelle
19
Sprechen Sie über Pyinstaller für Windows anstelle von Py2exe.
Changelog
8
Es ist erwähnenswert, dass ab 4.5 QT unter der LGPL sein wird.
CTT
14
... weshalb sollte man jetzt sehr viel mit berücksichtigen pyside die ist LGPL. Es ist auch pythonischer als die Python 2-API von PyQt4.
Chris Morgan
4
Sie können auch cx_Freeze hinzufügen , das plattformübergreifend ist, verwaltet wird und Python 3.x unterstützt.
fbmd
2
Warum wird Kivy hier nicht erwähnt ? Ist es keine gültige Option für diese Frage?
SilSur
56

Ein anderes System (in der akzeptierten Antwort noch nicht erwähnt) ist PyInstaller, das für ein PyQt-Projekt von mir funktioniert hat, wenn py2exe dies nicht tun würde. Ich fand es einfacher zu bedienen.

http://www.pyinstaller.org/

Pyinstaller basiert auf Gordon McMillans Python Installer. Welches ist nicht mehr verfügbar.

Jamie
quelle
1
Und mehr als 3 Jahre nachdem diese Antwort geschrieben wurde, unterstützt Pyinstaller STILL weder Python 3 noch ist es in der Roadmap zukünftiger Versionen aufgeführt. Ich meine, ist AIX- und Solaris-Unterstützung wirklich nützlicher als Python 3?
Dave
11
Es unterstützt jetzt Python 2.7 und Python 3.3, 3.4 und 3.5.
Katu
4
Und jetzt auch 3.6.
Rexcirus
14

Ein alternatives Tool zu py2exe ist bbfreeze, das ausführbare Dateien für Windows und Linux generiert. Es ist neuer als py2exe und handhabt Eier ziemlich gut. Ich habe festgestellt, dass es ohne Konfiguration für eine Vielzahl von Anwendungen auf magische Weise besser funktioniert.

Michael Twomey
quelle
11

Es gibt auch PyGTK , einen Python-Wrapper für das Gnome Toolkit. Ich fand es einfacher, mich mit Tkinter zu beschäftigen, da ich bisher so gut wie keine Kenntnisse in der GUI-Programmierung hatte. Es funktioniert ziemlich gut und hat einige gute Tutorials. Leider gibt es noch kein Installationsprogramm für Python 2.6 für Windows und möglicherweise für eine Weile nicht.

Tofystedeth
quelle
6

Da Python jetzt standardmäßig auf fast jedem Nicht-Windows-Betriebssystem installiert ist, müssen Sie nur sicherstellen, dass alle von Ihnen verwendeten nicht standardmäßigen Bibliotheken installiert sind.

Es ist jedoch möglich, ausführbare Dateien zu erstellen, die den Python-Interpreter und alle von Ihnen verwendeten Bibliotheken enthalten. Dies führt jedoch wahrscheinlich zu einer großen ausführbaren Datei.

MacOS X bietet sogar Unterstützung in der Xcode-IDE zum Erstellen von eigenständigen GUI-Apps. Diese können von jedem Benutzer ausgeführt werden, der OS X ausführt.

Matthew Schinckel
quelle
6

Für die GUI selbst:

PyQT ist so ziemlich die Referenz.

Eine andere Möglichkeit, eine schnelle Benutzeroberfläche zu entwickeln, besteht darin, eine Web-App zu schreiben, lokal ausführen zu lassen und die App im Browser anzuzeigen.

Wenn Sie sich für die von lubos hasko vorgeschlagene Tkinter-Option entscheiden, möchten Sie möglicherweise portablepy ausprobieren, damit Ihre App in einer Windows-Umgebung ohne Python ausgeführt wird.

Fulmicoton
quelle
4

Ich bin mir nicht sicher, ob dies der beste Weg ist, aber wenn ich Ruby-GUI-Apps (nicht Python, aber das gleiche "Problem" in Bezug auf EXE-Dateien) unter Windows bereitstelle, schreibe ich einfach eine Kurzer Launcher in C #, der mein Hauptskript aufruft. Es wird zu einer ausführbaren Datei kompiliert, und ich habe dann eine ausführbare Anwendungsdatei.

Brian Warshaw
quelle
@Brian Hast du _why's Technik zur Selbstausführung von Schuh-Apps gesehen? Dies könnte wahrscheinlich mit Nicht-Schuh-Programmen geschehen.
Adam Lassek
Für diese Apps ist keiner meiner Benutzer anonym. Ich weiß, ob sie die Laufzeit haben, und wenn nicht, kann ich sie für sie installieren. Das Hauptanliegen in diesem Thema ist, wie diese Anwendungen gestartet werden können, ohne eine Eingabeaufforderung öffnen und die ausführbare Datei der Laufzeit gefolgt vom Programmnamen eingeben zu müssen.
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

Dann sollten Sie beispielsweise py2exe verwenden, um alle zum Ausführen der App erforderlichen Dateien in einen Ordner zu bringen, auch wenn der Benutzer kein Python auf seinem PC hat (ich spreche von Windows ... für das Apple OS besteht keine Notwendigkeit einer ausführbaren Datei, denke ich, da sie mit Python geliefert wird, ohne dass sie installiert werden muss.

Erstellen Sie diese Datei

1) Erstellen Sie eine setup.py

mit diesem Code:

from distutils.core import setup
import py2exe

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

Speichern Sie es in einem Ordner

2) Legen Sie Ihr Programm in denselben Ordner von setup.py. Legen Sie in diesem Ordner das Programm ab, das Sie verteilbar machen möchten: es: l4h.py

ps: ändere den Namen der Datei (von l4h auf alles, was du willst, das ist ein Beispiel)

3) Führen Sie cmd aus diesem Ordner aus (klicken Sie im Ordner mit der rechten Maustaste auf + Umschalttaste und wählen Sie hier
cmd starten). 4) Schreiben Sie in cmd:> python setup.py py2exe.
5) Im dist-Ordner befinden sich alle benötigten Dateien
6) Sie kann es zippen und verteilen

Pyinstaller

Installieren Sie es von cmd

** **.

pip install pyinstaller

** **.

Führen Sie es vom cmd aus dem Ordner aus, in dem sich die Datei befindet

** **.

pyinstaller file.py

** **.

Giovanni G. PY
quelle
2

PySimpleGUI verpackt tkinter und funktioniert unter Python 3 und 2.7. Es läuft auch auf Qt, WxPython und in einem Webbrowser und verwendet für alle Plattformen denselben Quellcode.

Sie können benutzerdefinierte GUIs erstellen, die dieselben Widgets verwenden, die Sie in tkinter finden (Schieberegler, Kontrollkästchen, Optionsfelder, ...). Der Code ist in der Regel sehr kompakt und lesbar.

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

Bild erstellt aus veröffentlichtem PySimpleGUI-Code

Wie in der PySimpleGUI-Dokumentation erläutert , erstellen Sie die von Ihnen ausgeführte EXE- Datei wie folgt :

pyinstaller -wF MyGUIProgram.py

MikeyB
quelle
1

Sie müssen nicht kompilieren Python nicht für Mac / Windows / Linux . Da es sich um eine interpretierte Sprache handelt, muss lediglich der Python-Interpreter auf dem System Ihrer Wahl installiert sein (er ist für alle drei Plattformen verfügbar).

Was eine GUI-Bibliothek betrifft, die plattformübergreifend funktioniert, funktioniert die Tk / Tcl- Widget-Bibliothek von Python sehr gut, und ich glaube, sie ist ausreichend plattformübergreifend.

Tkinter ist die Python-Schnittstelle zu Tk / Tcl

Von der Python-Projektwebseite:

Tkinter ist nicht das einzige GuiProgramming-Toolkit für Python. Es ist jedoch das am häufigsten verwendete und fast das einzige, das zwischen Unix, Mac und Windows portierbar ist

Justin Standard
quelle
4
Wie würden Sie ein Installationspaket für die Bereitstellung auf Systemen von Personen erstellen, die nur eine einstufige Installation wünschen (z. B. einen Doppelklick auf ein einzelnes Installationspaket in Windows)?
Craig McQueen
Dafür gibt es einige mir bekannte Ansätze: Sie würden wahrscheinlich ein Installationsprogramm im Batch-Skript schreiben oder für das Zielsystem kompilieren, das die benötigten Dateien irgendwo ablegt und dabei die benötigten Bibliotheken und Laufzeiten installiert.
Justin Standard
1
Die Installation von Python als Teil Ihrer eigenen Installation wäre etwas umständlich, da Sie sich mit der Möglichkeit auseinandersetzen müssten, dass die falsche Version von Python bereits installiert ist. Sie müssten nebeneinander installieren, damit Ihre Anwendung auf die neu installierte Version von Python zugreifen kann, aber alle vorhandenen Anwendungen verwenden weiterhin die alte Version von Python. (dh ohne Dinge wie die .py-Dateizuordnung oder den PFAD durcheinander zu bringen)
Jonathan Hartley
Es ist wahrscheinlicher, dass Ihr Installationsprogramm prüft, ob die richtige Version von Python vorhanden ist. Wenn es diese gefunden hat, verwenden Sie diese, andernfalls installieren Sie Python als Teil des Installationsprozesses.
Justin Standard
Richtig - aber diese zweite Option "ansonsten Python als Teil des Installationsprozesses installieren" ist genau das, worüber ich spreche. Das wäre aus den von mir angegebenen Gründen fummelig.
Jonathan Hartley
0

Sie können appJarfür die grundlegende GUI-Entwicklung verwenden.

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 beim Ausführen

Siehe Dokumentation auf der AppJar-Website .

Die Installation erfolgt über die pip install appjarBefehlszeile.

shahar_m
quelle
0

!!! KIVY !!!

Ich war erstaunt zu sehen, dass niemand Kivy erwähnte !!!

Ich habe einmal ein Projekt mit Tkinter durchgeführt, obwohl sie befürworten, dass es sich stark verbessert hat, gibt es mir immer noch ein Gefühl von Windows 98, also bin ich zu Kivy gewechselt .

Ich habe eine Tutorial-Serie verfolgt wenn es hilft ...

Um eine Vorstellung davon zu bekommen, wie Kivy aussieht, sehen Sie sich Folgendes an (Das Projekt, an dem ich arbeite):

Das Projekt, an dem ich arbeite

Und ich arbeite jetzt kaum eine Woche daran! Die Vorteile für Kivy, die Sie fragen? Überprüfen Sie dies

Der Grund, warum ich mich für dieses Produkt entschieden habe, ist sein Aussehen und dass es auch für Mobilgeräte verwendet werden kann.

Ritveak
quelle