ฉันจะสร้างแอพ GUI ข้ามแพลตฟอร์มที่ปฏิบัติการโดยตรงโดยใช้ Python ได้อย่างไร


263

Python ทำงานบนหลาย ๆ แพลตฟอร์มและสามารถใช้กับเดสก์ท็อปและเว็บแอพพลิเคชั่นได้ดังนั้นฉันจึงสรุปได้ว่ามีบางวิธีที่จะรวบรวมมันไว้ในไฟล์ปฏิบัติการสำหรับ Mac, Windows และ Linux

ปัญหาที่เกิดขึ้นฉันไม่รู้ว่าจะเริ่มต้นอย่างไรหรือจะเขียน GUI กับมันได้อย่างไรใครบ้างที่สามารถให้แสงสว่างและชี้ให้ฉันไปในทิศทางที่ถูกต้องได้ไหม

คำตอบ:


285

ก่อนอื่นคุณจะต้องมีไลบรารี GUI ที่มีการผูก Python จากนั้น (ถ้าคุณต้องการ) บางโปรแกรมที่จะแปลงสคริปต์ python ของคุณให้กลายเป็น executables แบบสแตนด์อโลน

ไลบรารี GUI ข้ามแพลตฟอร์มที่มีการผูก Python (Windows, Linux, Mac)

แน่นอนมีหลายอย่าง แต่สิ่งที่ได้รับความนิยมมากที่สุดที่ฉันเคยเห็นในป่าคือ:

  • Tkinter - ขึ้นอยู่กับชุดเครื่องมือ Tk GUI (ไลบรารีจริงของมาตรฐาน GUI สำหรับ python ฟรีสำหรับโครงการเชิงพาณิชย์)
  • WxPython - อิงWxWidgets (ยอดนิยมฟรีสำหรับโครงการเพื่อการพาณิชย์)
  • Qtใช้ผูก PyQtหรือQt สำหรับงูหลาม อดีตไม่ฟรีสำหรับโครงการเชิงพาณิชย์ หลังมีความเป็นผู้ใหญ่น้อยกว่า แต่สามารถใช้ได้ฟรี

รายการทั้งหมดอยู่ที่http://wiki.python.org/moin/GuiProgramming

ปฏิบัติการเดี่ยว (ทุกแพลตฟอร์ม)

  • PyInstaller - ใช้งานมากที่สุด (สามารถใช้กับPyQt)
  • fbs - หากคุณเลือก Qt ด้านบน

ปฏิบัติการเดี่ยว (Windows)

  • py2exe - เคยเป็นที่นิยมมากที่สุด

ปฏิบัติการเดี่ยว (Linux)

  • ตรึง - ทำงานในลักษณะเดียวกับ py2exe แต่มีเป้าหมายเป็นแพลตฟอร์ม Linux

ปฏิบัติการเดี่ยว (Mac)

  • py2app - อีกครั้งทำงานเหมือน py2exe แต่กำหนดเป้าหมายเป็น Mac OS

19
พูดคุยเกี่ยวกับ pyinstaller สำหรับ windows แทนที่จะเป็น py2exe
changelog

8
เป็นที่น่าสังเกตว่าตั้งแต่ 4.5 QT จะอยู่ภายใต้ LGPL
CTT

14
... ซึ่งเป็นสาเหตุที่คุณควรพิจารณาใช้PySideซึ่งก็คือ LGPL นอกจากนี้ยังมี Pythonic มากกว่า Python 2 API ของ PyQt4
Chris Morgan

4
คุณอาจเพิ่มcx_Freezeซึ่งเป็น cross-platform ดูแลและสนับสนุน Python 3.x
fbmd

2
ทำไมไม่มีการเอ่ยถึงKivyที่นี่? มันไม่ใช่ตัวเลือกที่ถูกต้องสำหรับคำถามนี้หรือไม่?
SilSur

56

อีกระบบหนึ่ง (ยังไม่ได้กล่าวถึงในคำตอบที่ยอมรับ) คือ PyInstaller ซึ่งทำงานกับโครงการ PyQt ของฉันเมื่อ py2exe ไม่ทำงาน ฉันพบว่าใช้งานง่ายขึ้น

http://www.pyinstaller.org/

Pyinstaller ใช้ตัวติดตั้ง Python ของ Gordon McMillan ซึ่งไม่สามารถใช้ได้อีกต่อไป


1
และมากกว่า 3 ปีหลังจากคำตอบนี้ถูกเขียนขึ้น pyinstaller STILL ไม่สนับสนุน Python 3 และไม่ได้ระบุไว้ในแผนงานของการวางจำหน่ายในอนาคต ฉันหมายถึง AIX และ Solaris สนับสนุนประโยชน์มากกว่า Python 3 จริงหรือไม่
เดฟ

11
รองรับ Python 2.7 และ Python 3.3, 3.4 และ 3.5 ในตอนนี้
Katu

4
และตอนนี้ 3.6 เช่นกัน
Rexcirus

14

เครื่องมือทางเลือกสำหรับ py2exe คือbbfreezeซึ่งสร้างไฟล์ปฏิบัติการสำหรับ windows และ linux มันใหม่กว่า py2exe และจัดการกับไข่ได้ค่อนข้างดี ฉันพบว่ามันใช้งานได้ดีขึ้นอย่างน่าอัศจรรย์โดยไม่มีการกำหนดค่าสำหรับแอปพลิเคชันที่หลากหลาย


11

นอกจากนี้ยังมีPyGTKซึ่งโดยทั่วไปแล้วเป็นเครื่องมือห่อหุ้มงูหลามสำหรับ Gnome Toolkit ฉันพบว่ามันง่ายกว่าที่จะปิดใจกว่า Tkinter ซึ่งมาจากความรู้เกี่ยวกับการเขียนโปรแกรม GUI ก่อนหน้านี้ มันใช้งานได้ดีและมีบทเรียนที่ดี น่าเสียดายที่ยังไม่มีโปรแกรมติดตั้งสำหรับ Python 2.6 สำหรับ Windows และอาจใช้เวลาสักครู่


6

เนื่องจากมีการติดตั้ง python ในระบบปฏิบัติการที่ไม่ใช่ Windows เกือบทุกแห่งสิ่งเดียวที่คุณต้องแน่ใจคือว่ามีการติดตั้งไลบรารีที่ไม่ได้มาตรฐานทั้งหมดที่คุณใช้

ต้องบอกว่ามันเป็นไปได้ที่จะสร้างไฟล์ปฏิบัติการที่มีตัวแปลหลามและไลบรารี่ที่คุณใช้ นี่เป็นโอกาสที่จะสร้างไฟล์ปฏิบัติการขนาดใหญ่ได้

MacOS X ยังมีการสนับสนุนใน Xcode IDE สำหรับการสร้างแอพ GUI แบบสแตนด์อโลนแบบเต็ม ผู้ใช้ทุกคนที่ใช้ OS X สามารถดำเนินการเหล่านี้ได้


6

สำหรับ GUI เอง:

PyQTเป็นข้อมูลอ้างอิงค่อนข้างมาก

อีกวิธีหนึ่งในการพัฒนาอินเทอร์เฟซผู้ใช้อย่างรวดเร็วคือการเขียนเว็บแอปเรียกใช้งานจากภายในเครื่องและแสดงแอปในเบราว์เซอร์

นอกจากนี้หากคุณเลือกตัวเลือก Tkinter ที่ lubos hasko แนะนำคุณอาจลองพกพาแบบพกพาเพื่อให้แอปของคุณทำงานบนสภาพแวดล้อม Windows โดยไม่ต้องใช้ Python


4

ฉันไม่แน่ใจว่านี่เป็นวิธีที่ดีที่สุดที่จะทำ แต่เมื่อฉันปรับใช้แอพ Ruby GUI (ไม่ใช่ Python แต่มี "ปัญหา" เดียวกันกับ. exe ที่เกี่ยวข้อง) บน Windows ฉันเพิ่งเขียน ตัวเรียกสั้นใน C # ที่เรียกใช้สคริปต์หลักของฉัน มันคอมไพล์ไฟล์ที่เรียกใช้งานได้และฉันมีแอปพลิเคชั่น


@Brian คุณเคยเห็นเทคนิคของ _whyสำหรับแอพ Shoes ที่ทำงานด้วยตัวเองหรือ อาจทำได้ด้วยโปรแกรมที่ไม่ใช่รองเท้า
Adam Lassek

สำหรับแอพเหล่านี้ไม่มีผู้ใช้ของฉันที่ไม่ระบุชื่อ ฉันรู้ว่าพวกเขามีรันไทม์และถ้าพวกเขาไม่ฉันสามารถติดตั้งให้พวกเขา ข้อกังวลหลักในหัวข้อนี้คือวิธีการเปิดใช้งานแอปพลิเคชันเหล่านี้โดยไม่ต้องเปิดพรอมต์คำสั่งและพิมพ์ไฟล์สั่งการของรันไทม์ตามด้วยชื่อโปรแกรม
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

จากนั้นคุณควรใช้ py2exe ตัวอย่างเช่นการนำไฟล์ทั้งหมดที่จำเป็นในการเรียกใช้แอพมาไว้ในโฟลเดอร์เดียวแม้ว่าผู้ใช้ไม่มีไพ ธ อนบนพีซีของเขา (ฉันกำลังพูดถึง windows ... สำหรับ apple os ไม่มีความจำเป็น ของไฟล์ปฏิบัติการฉันคิดว่ามันมาพร้อมกับหลามในมันโดยไม่จำเป็นต้องติดตั้ง

สร้างไฟล์นี้

1) สร้าง setup.py

ด้วยรหัสนี้:

from distutils.core import setup
import py2exe

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

บันทึกไว้ในโฟลเดอร์

2) วางโปรแกรมของคุณในโฟลเดอร์เดียวกันของ setup.py ใส่ในโฟลเดอร์นี้โปรแกรมที่คุณต้องการทำให้ distribuitable: es: l4h.py

ps: เปลี่ยนชื่อไฟล์ (จาก l4h เป็นทุกอย่างที่คุณต้องการนั่นคือตัวอย่าง)

3) เรียกใช้ cmd จากโฟลเดอร์นั้น (ในโฟลเดอร์คลิกขวา + shift แล้วเลือก start cmd ที่นี่)
4) เขียนใน cmd:> python setup.py py2exe
5) ในโฟลเดอร์ dist มีไฟล์ทั้งหมดที่คุณต้องการ
6) คุณ สามารถ zip และแจกจ่าย

Pyinstaller

ติดตั้งจาก cmd

**

pip install pyinstaller

**

เรียกใช้จาก cmd จากโฟลเดอร์ที่ไฟล์นั้นอยู่

**

py.pyer file.py

**


2

PySimpleGUI ล้อม tkinter และทำงานบน Python 3 และ 2.7 มันยังทำงานบน Qt, WxPython และในเว็บเบราว์เซอร์โดยใช้ซอร์สโค้ดเดียวกันสำหรับทุกแพลตฟอร์ม

คุณสามารถสร้าง GUI แบบกำหนดเองที่ใช้วิดเจ็ตแบบเดียวกันทั้งหมดที่คุณพบใน tkinter (ตัวเลื่อน, ช่องทำเครื่องหมาย, ปุ่มตัวเลือก, ... ) รหัสมีแนวโน้มที่จะกะทัดรัดและอ่านได้

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

ภาพที่สร้างจากรหัส PySimpleGUI ที่โพสต์

ตามที่อธิบายไว้ในเอกสาร PySimpleGUIเพื่อสร้างไฟล์. EXE ที่คุณเรียกใช้:

pyinstaller -wF MyGUIProgram.py


1

คุณไม่จำเป็นต้องรวบรวมไพ ธ อนสำหรับ Mac / Windows / Linux มันเป็นภาษาที่ตีความดังนั้นคุณต้องติดตั้งล่าม Python ไว้ในระบบที่คุณเลือก (สามารถใช้ได้กับทั้งสามแพลตฟอร์ม)

สำหรับห้องสมุด GUI ที่ทำงานข้ามแพลตฟอร์ม ธTk / Tclเครื่องมืองานห้องสมุดเป็นอย่างดีและผมเชื่อว่าเป็นแพลตฟอร์มข้ามพอ

Tkinterเป็นอินเทอร์เฟซหลามกับ Tk / Tcl

จากหน้าโครงการหลาม:

Tkinter ไม่ใช่ชุดเครื่องมือ GuiProgramming สำหรับ Python เท่านั้น อย่างไรก็ตามมันเป็นอุปกรณ์ที่ใช้กันมากที่สุดและเกือบจะเป็นอุปกรณ์พกพาที่ใช้กันระหว่าง Unix, Mac และ Windows


4
ดังนั้นคุณจะสร้างแพ็คเกจการติดตั้งเพื่อปรับใช้กับระบบของผู้ที่ต้องการติดตั้งเพียงขั้นตอนเดียว (เช่นดับเบิลคลิกที่แพ็คเกจการติดตั้งเดียวใน Windows) ได้อย่างไร
เคเอสเคป

สำหรับวิธีการที่มีไม่กี่วิธีที่ฉันรู้: คุณอาจจะเขียนโปรแกรมติดตั้งในชุดสคริปต์หรือรวบรวมสำหรับระบบเป้าหมายซึ่งจะวางไฟล์ที่ต้องการบางแห่งและติดตั้งห้องสมุดที่จำเป็นและรันไทม์ในกระบวนการ
จัสตินมาตรฐาน

1
การติดตั้ง Python ในฐานะที่เป็นส่วนหนึ่งของการติดตั้งของคุณเองนั้นอาจเป็นเรื่องเล็กน้อยเพราะคุณจะต้องจัดการกับความเป็นไปได้ที่จะติดตั้ง Python เวอร์ชันผิด คุณต้องติดตั้งแบบเคียงข้างกันเพื่อให้แอปพลิเคชันของคุณสามารถเข้าถึง Python เวอร์ชันที่ติดตั้งใหม่ แต่แอปพลิเคชันใด ๆ ที่มีอยู่ยังคงใช้ Python เวอร์ชันเก่าต่อไป (คือไม่มี messing up สิ่งเช่นสมาคม .py ไฟล์หรือเส้นทาง)
โจนาธานฮาร์ทลี่

มีโอกาสมากที่ผู้ติดตั้งของคุณจะตรวจสอบการมีอยู่ของ Python ที่ถูกต้องและหากพบให้ใช้ตัวนั้นหรือติดตั้ง python เป็นส่วนหนึ่งของกระบวนการติดตั้ง
จัสตินมาตรฐาน

ใช่ - ตัวเลือกที่สอง 'ติดตั้งไพ ธ อนเป็นส่วนหนึ่งของกระบวนการติดตั้ง' นั่นคือสิ่งที่ฉันกำลังพูดถึง นั่นจะเป็นเรื่องตลกเพราะเหตุผลที่ฉันให้
Jonathan Hartley

0

คุณสามารถใช้appJarสำหรับการพัฒนา 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 เมื่อทำงาน

ดูเอกสารที่เว็บไซต์ appJar

ทำการติดตั้งด้วยpip install appjarจากบรรทัดคำสั่ง


0

!!! KIVY !!!

ฉันประหลาดใจที่เห็นว่าไม่มีใครพูดถึง Kivy !!!

ฉันได้ทำเมื่อโครงการโดยใช้ Tkinter แม้ว่าพวกเขาจะสนับสนุนว่าจะได้ดีขึ้นมากก็ยังคงทำให้ฉันรู้สึกของ Windows 98 ดังนั้นฉันเปลี่ยนไปKivy

ฉันได้ติดตามชุดบทช่วยสอนหากช่วย ...

เพียงแค่ให้ความคิดของลักษณะ kivy ดูนี้ (โครงการที่ฉันกำลังทำงาน):

โครงการที่ฉันกำลังดำเนินการ

และฉันก็ทำมาแล้วเกือบหนึ่งสัปดาห์แล้ว! ประโยชน์สำหรับ Kivy ที่คุณถาม? ตรวจสอบสิ่งนี้

เหตุผลที่ฉันเลือกสิ่งนี้คือรูปลักษณ์และสามารถใช้ในมือถือได้เช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.