Bagaimana saya bisa membuat aplikasi GUI lintas-platform yang dapat dieksekusi langsung menggunakan Python?

263

Python bekerja pada banyak platform dan dapat digunakan untuk aplikasi desktop dan web, jadi saya menyimpulkan bahwa ada beberapa cara untuk mengkompilasinya menjadi executable untuk Mac, Windows dan Linux.

Masalahnya adalah saya tidak tahu harus mulai dari mana atau bagaimana menulis GUI dengannya, dapatkah ada yang menjelaskan hal ini dan mengarahkan saya ke arah yang benar?

Teifion
sumber

Jawaban:

285

Pertama, Anda akan memerlukan beberapa pustaka GUI dengan binding Python dan kemudian (jika Anda mau) beberapa program yang akan mengubah skrip python Anda menjadi executable mandiri.

Pustaka GUI lintas platform dengan binding Python (Windows, Linux, Mac)

Tentu saja, ada banyak, tetapi yang paling populer yang pernah saya lihat di alam liar adalah:

  • Tkinter - berdasarkan pada Tk GUI toolkit (pustaka GUI standar de-facto untuk python, gratis untuk proyek komersial)
  • WxPython - berdasarkan pada WxWidgets (populer, gratis untuk proyek komersial)
  • Qt menggunakan binding PyQt atau Qt untuk Python . Yang pertama tidak gratis untuk proyek komersial. Yang terakhir kurang matang, tetapi dapat digunakan secara gratis.

Daftar lengkapnya ada di http://wiki.python.org/moin/GuiProgramming

Dapat dieksekusi tunggal (semua platform)

  • PyInstaller - yang paling aktif (Bisa juga digunakan dengan PyQt)
  • fbs - jika Anda memilih Qt di atas

Eksekusi tunggal (Windows)

  • py2exe - digunakan untuk menjadi yang paling populer

Eksekusi tunggal (Linux)

  • Freeze - bekerja dengan cara yang sama seperti py2exe tetapi menargetkan platform Linux

Eksekusi tunggal (Mac)

  • py2app - lagi-lagi, berfungsi seperti py2exe tetapi menargetkan Mac OS
lubos hasko
sumber
19
Bicara tentang pyinstaller untuk windows, bukan py2exe.
changelog
8
Perlu dicatat bahwa pada 4,5 QT akan berada di bawah LGPL.
CTT
14
... itulah sebabnya Anda sekarang harus mempertimbangkan menggunakan PySide yang merupakan LGPL. Ini juga lebih Pythonic daripada PyQt4's Python 2 API.
Chris Morgan
4
Anda juga dapat menambahkan cx_Freeze , yang merupakan lintas platform, dikelola, dan mendukung Python 3.x.
fbmd
2
Mengapa tidak disebutkan Kivy di sini? Apakah ini bukan opsi yang valid untuk pertanyaan ini?
SilSur
56

Sistem lain (belum disebutkan dalam jawaban yang diterima) adalah PyInstaller, yang bekerja untuk proyek PyQt milik saya ketika py2exe tidak mau. Saya merasa lebih mudah digunakan.

http://www.pyinstaller.org/

Pyinstaller didasarkan pada Pemasang Python Gordon McMillan. Yang tidak lagi tersedia.

Jamie
sumber
1
Dan lebih dari 3 tahun setelah jawaban ini ditulis, pyinstaller MASIH tidak mendukung Python 3, juga tidak tercantum dalam peta jalan rilis mendatang. Maksud saya, apakah dukungan AIX dan Solaris benar-benar lebih berguna daripada Python 3?
Dave
11
Ini mendukung Python 2.7 dan Python 3.3, 3.4 dan 3.5 sekarang.
Katu
4
Dan 3,6 juga sekarang.
Rexcirus
14

Alat alternatif untuk py2exe adalah bbfreeze yang menghasilkan file executable untuk windows dan linux. Ini lebih baru dari py2exe dan menangani telur dengan cukup baik. Saya telah menemukannya secara ajaib bekerja lebih baik tanpa konfigurasi untuk berbagai aplikasi.

Michael Twomey
sumber
11

Ada juga PyGTK , yang pada dasarnya adalah pembungkus Python untuk Gnome Toolkit. Saya merasa lebih mudah untuk membungkus pikiran saya daripada Tkinter, datang dari cukup banyak tidak memiliki pengetahuan tentang pemrograman GUI sebelumnya. Ini bekerja dengan cukup baik dan memiliki beberapa tutorial yang bagus. Sayangnya belum ada pemasang untuk Python 2.6 untuk Windows, dan mungkin tidak untuk sementara waktu.

Tofystedeth
sumber
6

Karena python diinstal pada hampir setiap OS non-Windows secara default sekarang, satu-satunya hal yang benar-benar perlu Anda pastikan adalah bahwa semua pustaka non-standar yang Anda gunakan diinstal.

Karena itu, adalah mungkin untuk membangun executable yang menyertakan interpreter python, dan perpustakaan apa pun yang Anda gunakan. Ini kemungkinan akan membuat executable besar.

MacOS X bahkan menyertakan dukungan dalam Xcode IDE untuk membuat aplikasi GUI mandiri lengkap. Ini dapat dijalankan oleh pengguna yang menjalankan OS X.

Matthew Schinckel
sumber
6

Untuk GUI itu sendiri:

PyQT cukup banyak referensi.

Cara lain untuk mengembangkan antarmuka pengguna yang cepat adalah dengan menulis aplikasi web, menjalankannya secara lokal dan menampilkan aplikasi di browser.

Plus, jika Anda memilih opsi Tkinter yang disarankan oleh lubos hasko, Anda mungkin ingin mencoba portablepy agar aplikasi Anda berjalan di lingkungan Windows tanpa Python.

fulmicoton
sumber
4

Saya tidak yakin bahwa ini adalah cara terbaik untuk melakukannya, tetapi ketika saya menggunakan aplikasi Ruby GUI (bukan Python, tetapi memiliki "masalah" yang sama sejauh menyangkut masalah .exe di Windows), saya hanya menulis peluncur pendek dalam C # yang memanggil skrip utama saya. Ini mengkompilasi ke executable, dan saya kemudian memiliki aplikasi executable.

Brian Warshaw
sumber
@Brian Pernahkah Anda melihat teknik _why untuk aplikasi Sepatu yang dieksekusi sendiri? Mungkin bisa dilakukan dengan program non-Sepatu.
Adam Lassek
Untuk aplikasi ini, tidak ada pengguna saya yang anonim. Saya tahu jika mereka memiliki runtime, dan jika tidak, saya dapat menginstalnya untuk mereka. Perhatian utama dalam topik ini adalah bagaimana meluncurkan aplikasi ini tanpa harus membuka prompt perintah dan ketik runtime's executable diikuti oleh nama program.
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

Maka Anda harus menggunakan py2exe, misalnya, untuk membawa satu folder semua file yang diperlukan untuk menjalankan aplikasi, bahkan jika pengguna tidak memiliki python pada pc-nya (saya berbicara tentang windows ... untuk os apple tidak perlu file yang dapat dieksekusi, saya pikir, karena datang dengan python di dalamnya tanpa perlu menginstalnya.

Buat file ini

1) Buat setup.py

dengan kode ini:

from distutils.core import setup
import py2exe

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

simpan di folder

2) Letakkan program Anda di folder setup.py yang sama taruh di folder ini program yang ingin Anda buat distribuitable: es: l4h.py

ps: ubah nama file (dari l4h menjadi apapun yang Anda inginkan, itu adalah contoh)

3) Jalankan cmd dari folder itu (pada folder, klik kanan + shift dan pilih mulai cmd di sini)
4) tulis dalam cmd:> python setup.py py2exe
5) di folder dist ada semua file yang Anda butuhkan
6) Anda dapat zip dan mendistribusikannya

Pyinstaller

Instal dari cmd

**

pip instal pyinstaller

**

Jalankan dari cmd dari folder tempat file tersebut berada

**

pyinstaller file.py

**

Giovanni G. PY
sumber
2

PySimpleGUI membungkus tkinter dan bekerja pada Python 3 dan 2.7. Ini juga berjalan pada Qt, WxPython dan di browser web, menggunakan kode sumber yang sama untuk semua platform.

Anda dapat membuat GUI khusus yang memanfaatkan semua widget yang sama dengan yang Anda temukan di tkinter (slider, kotak centang, tombol radio, ...). Kode cenderung sangat ringkas dan mudah dibaca.

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

Gambar dibuat dari kode PySimpleGUI yang diposting

Seperti yang dijelaskan dalam Dokumentasi PySimpleGUI , untuk membangun file .EXE yang Anda jalankan:

pyinstaller -wF MyGUIProgram.py

MikeyB
sumber
1

Anda tidak perlu mengkompilasi python untuk Mac / Windows / Linux. Ini adalah bahasa yang ditafsirkan, jadi Anda hanya perlu memiliki interpreter Python diinstal pada sistem pilihan Anda (tersedia untuk ketiga platform).

Adapun perpustakaan GUI yang bekerja lintas platform, perpustakaan widget Tk / Tcl Python bekerja dengan sangat baik, dan saya percaya cukup lintas platform.

Tkinter adalah antarmuka python ke Tk / Tcl

Dari halaman web proyek python:

Tkinter bukan satu-satunya toolkit GuiProgramming untuk Python. Namun itu yang paling umum digunakan, dan hampir satu-satunya yang portabel antara Unix, Mac dan Windows

Justin Standard
sumber
4
Jadi bagaimana Anda membuat paket instalasi untuk digunakan pada sistem orang-orang yang hanya ingin menginstal 1 langkah (mis. Klik dua kali pada satu paket instalasi di Windows)?
Craig McQueen
Untuk itu ada beberapa pendekatan yang saya tahu: Anda mungkin akan menulis installer dalam skrip batch atau dikompilasi untuk sistem target yang akan menjatuhkan file yang diperlukan di suatu tempat dan menginstal pustaka dan runtime yang diperlukan dalam proses.
Justin Standard
1
Menginstal Python sebagai bagian dari instalasi Anda sendiri akan sedikit rumit, karena Anda harus berhadapan dengan kemungkinan versi Python yang salah telah diinstal. Anda harus menginstal berdampingan, sehingga aplikasi Anda dapat mengakses versi Python yang baru saja diinstal, tetapi aplikasi yang ada terus menggunakan versi lama Python. (Yaitu tanpa mengacaukan hal-hal seperti asosiasi file .py atau PATH)
Jonathan Hartley
Kemungkinan besar installer Anda akan memeriksa keberadaan versi Python yang tepat, dan jika menemukannya, gunakan itu, jika tidak, pasang python sebagai bagian dari proses pemasangan.
Justin Standard
Benar - tetapi pilihan kedua 'jika tidak menginstal python sebagai bagian dari proses instalasi', adalah apa yang saya bicarakan. Itu akan fiddly, untuk alasan yang saya berikan.
Jonathan Hartley
0

Anda dapat menggunakan appJaruntuk pengembangan GUI dasar.

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 saat berjalan

Lihat dokumentasi di situs appJar .

Instalasi dibuat dengan pip install appjardari baris perintah.

shahar_m
sumber
0

!!! KIVY !!!

Saya kagum melihat tidak ada yang menyebut Kivy !!!

Saya pernah melakukan proyek menggunakan Tkinter, meskipun mereka menganjurkan bahwa itu telah meningkat banyak, itu masih memberi saya nuansa windows 98, jadi saya beralih ke Kivy .

Saya telah mengikuti serangkaian tutorial jika ini membantu ...

Hanya untuk memberikan gambaran tentang bagaimana penampilan kivy, lihat ini (Proyek yang sedang saya kerjakan):

Proyek yang sedang saya kerjakan

Dan saya telah mengerjakannya selama hampir seminggu sekarang! Manfaat untuk Kivy yang Anda minta? Memeriksa ini

Alasan mengapa saya memilih ini adalah, tampilannya dan dapat digunakan di ponsel juga.

Ritveak
sumber