Làm cách nào tôi có thể tạo ứng dụng GUI đa nền tảng có thể thực thi trực tiếp bằng Python?


263

Python hoạt động trên nhiều nền tảng và có thể được sử dụng cho các ứng dụng máy tính để bàn và web, do đó tôi kết luận rằng có một số cách để biên dịch nó thành một tệp thực thi cho Mac, Windows và Linux.

Vấn đề là tôi không biết bắt đầu từ đâu hoặc làm thế nào để viết GUI với nó, có ai có thể làm sáng tỏ điều này và chỉ cho tôi đi đúng hướng không?

Câu trả lời:


285

Trước tiên, bạn sẽ cần một số thư viện GUI với các ràng buộc Python và sau đó (nếu bạn muốn) một số chương trình sẽ chuyển đổi các tập lệnh python của bạn thành các tệp thực thi độc lập.

Các thư viện GUI đa nền tảng với các ràng buộc Python (Windows, Linux, Mac)

Tất nhiên, có rất nhiều, nhưng phổ biến nhất mà tôi từng thấy trong tự nhiên là:

  • Tkinter - dựa trên bộ công cụ GUI Tk (thư viện GUI tiêu chuẩn thực tế cho python, miễn phí cho các dự án thương mại)
  • WxPython - dựa trên WxWidgets (phổ biến, miễn phí cho các dự án thương mại)
  • Qt sử dụng các liên kết PyQt hoặc Qt cho Python . Các cựu không miễn phí cho các dự án thương mại. Thứ hai là ít trưởng thành hơn, nhưng có thể được sử dụng miễn phí.

Danh sách đầy đủ có tại http://wiki.python.org/moin/GuiProgramming

Đơn thực thi (tất cả các nền tảng)

  • PyInstaller - hoạt động mạnh nhất (Cũng có thể được sử dụng với PyQt)
  • fbs - nếu bạn chọn Qt ở trên

Đơn thực thi (Windows)

  • py2exe - từng là phổ biến nhất

Đơn thực thi (Linux)

  • Freeze - hoạt động theo cách tương tự như py2exe nhưng nhắm mục tiêu nền tảng Linux

Đơn thực thi (Mac)

  • py2app - một lần nữa, hoạt động như py2exe nhưng nhắm mục tiêu Mac OS

19
Nói về pyinstaller cho windows, thay vì py2exe.
thay đổi

8
Điều đáng chú ý là vào ngày 4,5 QT sẽ thuộc LGPL.
CTT

14
... đó là lý do bạn nên bây giờ rất nhiều xem xét sử dụng PySide LGPL. Nó cũng nhiều Pythonic hơn API Python 2 của PyQt4.
Chris Morgan

4
Bạn cũng có thể thêm cx_Freeze , nền tảng chéo, được duy trì và hỗ trợ Python 3.x.
fbmd

2
Tại sao không có đề cập đến Kivy ở đây? Nó không phải là một lựa chọn hợp lệ cho câu hỏi này?
SilSur

56

Một hệ thống khác (chưa được đề cập trong câu trả lời được chấp nhận) là PyInstaller, hoạt động cho một dự án PyQt của tôi khi py2exe không hoạt động. Tôi thấy nó dễ sử dụng hơn.

http://www.pyinstaller.org/

Pyinstaller dựa trên Trình cài đặt Python của Gordon McMillan. Mà không còn có sẵn.


1
Và hơn 3 năm sau khi câu trả lời này được viết, pyinstaller VẪN không hỗ trợ Python 3, và nó cũng không được liệt kê trong lộ trình phát hành trong tương lai. Ý tôi là, hỗ trợ AIX và Solaris có thực sự hữu ích hơn Python 3 không?
Dave

11
Nó hỗ trợ Python 2.7 và Python 3.3, 3.4 và 3.5 bây giờ.
Katu

4
Và 3.6 cũng vậy.
Rexcirus

14

Một công cụ thay thế cho py2exe là bbfreeze tạo ra các tệp thực thi cho windows và linux. Nó mới hơn py2exe và xử lý trứng khá tốt. Tôi đã thấy nó hoạt động tốt hơn mà không cần cấu hình cho nhiều ứng dụng.


11

Ngoài ra còn có PyGTK , về cơ bản là trình bao bọc Python cho Bộ công cụ Gnome. Tôi đã thấy dễ dàng bao bọc tâm trí của mình hơn Tkinter, đến từ gần như không có kiến ​​thức về lập trình GUI trước đây. Nó hoạt động khá tốt và có một số hướng dẫn tốt. Thật không may, chưa có trình cài đặt cho Python 2.6 cho Windows và có thể không được một lúc.


6

Vì python được cài đặt trên gần như mọi hệ điều hành Windows không phải mặc định bây giờ, điều duy nhất bạn thực sự cần đảm bảo là tất cả các thư viện không chuẩn bạn sử dụng đều được cài đặt.

Phải nói rằng, có thể xây dựng các tệp thực thi bao gồm trình thông dịch python và bất kỳ thư viện nào bạn sử dụng. Điều này có khả năng tạo ra một thực thi lớn, tuy nhiên.

MacOS X thậm chí còn bao gồm hỗ trợ trong Xcode IDE để tạo các ứng dụng GUI độc lập đầy đủ. Chúng có thể được chạy bởi bất kỳ người dùng nào đang chạy OS X.


6

Đối với GUI:

Trung Quốc là khá nhiều tài liệu tham khảo.

Một cách khác để phát triển giao diện người dùng nhanh là viết ứng dụng web, để ứng dụng chạy cục bộ và hiển thị ứng dụng trong trình duyệt.

Ngoài ra, nếu bạn chọn tùy chọn Tkinter được đề xuất bởi Lubos hasko, bạn có thể muốn dùng thử Portablepy để ứng dụng của bạn chạy trên môi trường Windows mà không cần Python.


4

Tôi không chắc chắn rằng đây là cách tốt nhất để làm điều đó, nhưng khi tôi triển khai các ứng dụng GUI GUI (không phải Python, nhưng có "vấn đề" tương tự như liên quan đến .exe) trên Windows, tôi chỉ viết một launcher ngắn trong C # gọi kịch bản chính của tôi. Nó biên dịch thành một tệp thực thi và sau đó tôi có một ứng dụng thực thi.


@Brian Bạn đã thấy kỹ thuật của ai để tự thực hiện các ứng dụng Giày chưa? Nó có thể được thực hiện với các chương trình không Giày.
Adam Lassek

Đối với các ứng dụng này, không có người dùng nào của tôi ẩn danh. Tôi biết nếu họ có thời gian chạy, và nếu họ không, tôi có thể cài đặt nó cho họ. Mối quan tâm chính trong chủ đề này là làm thế nào để khởi chạy các ứng dụng này mà không cần phải mở một dấu nhắc lệnh và nhập thực thi của bộ thực thi theo sau là tên chương trình.
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

Sau đó, bạn nên sử dụng py2exe, ví dụ, để mang vào một thư mục tất cả các tệp cần thiết để chạy ứng dụng, ngay cả khi người dùng không dùng python trên máy tính của mình (tôi đang nói về windows ... đối với hệ điều hành apple thì không cần của một tập tin thực thi, tôi nghĩ, vì nó đi kèm với python trong đó mà không cần cài đặt nó.

Tạo tập tin này

1) Tạo một thiết lập

với mã này:

from distutils.core import setup
import py2exe

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

lưu nó trong một thư mục

2) Đặt chương trình của bạn vào cùng một thư mục của setup.py đặt trong thư mục này chương trình bạn muốn làm cho chương trình đó có thể phân phối được: es: l4h.py

ps: thay đổi tên của tệp (từ l4h thành bất cứ điều gì bạn muốn, đó là một ví dụ)

3) Chạy cmd từ thư mục đó (trên thư mục, nhấp chuột phải + shift và chọn bắt đầu cmd tại đây)
4) ghi vào cmd:> python setup.py py2exe
5) trong thư mục dist có tất cả các tệp bạn cần
6) có thể nén và phân phối nó

Trình cài đặt

Cài đặt nó từ cmd

**

cài đặt pip

**

Chạy nó từ cmd từ thư mục chứa tệp

**

pyinstaller file.py

**


2

PySimpleGUI kết thúc tkinter và hoạt động trên Python 3 và 2.7. Nó cũng chạy trên Qt, WxPython và trong trình duyệt web, sử dụng cùng một mã nguồn cho tất cả các nền tảng.

Bạn có thể tạo GUI tùy chỉnh sử dụng tất cả các tiện ích giống như bạn tìm thấy trong tkinter (thanh trượt, hộp kiểm, nút radio, ...). Mã có xu hướng rất nhỏ gọn và dễ đọc.

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

Hình ảnh được tạo từ mã PySimpleGUI đã đăng

Như đã giải thích trong Tài liệu PySimpleGUI , để xây dựng tệp .EXE bạn chạy:

pyinstaller -wF MyGUIProgram.py


1

Bạn không cần phải biên dịch python cho Mac / Windows / Linux. Đây là ngôn ngữ được thông dịch, do đó bạn chỉ cần cài đặt trình thông dịch Python trên hệ thống bạn chọn (nó có sẵn cho cả ba nền tảng).

Đối với thư viện GUI hoạt động đa nền tảng, thư viện tiện ích Tk / Tcl của Python hoạt động rất tốt và tôi tin là có đủ nền tảng chéo.

Thợ săn là giao diện python cho Tk / Tcl

Từ trang web của dự án python:

Tkinter không phải là bộ công cụ GuiProgramming duy nhất cho Python. Tuy nhiên, đây là cái được sử dụng phổ biến nhất và gần như là cái duy nhất có thể di động giữa Unix, Mac và Windows


4
Vậy làm thế nào bạn có thể tạo gói cài đặt để triển khai trên các hệ thống của những người chỉ muốn cài đặt 1 bước (ví dụ: nhấp đúp vào gói cài đặt duy nhất trong Windows)?
Craig McQueen

Vì có một vài cách tiếp cận mà tôi biết: bạn có thể sẽ viết trình cài đặt theo tập lệnh bó hoặc được biên dịch cho hệ thống đích sẽ bỏ các tệp cần thiết ở đâu đó và cài đặt các thư viện và thời gian chạy cần thiết trong quy trình.
Justin Standard

1
Cài đặt Python như một phần của bản cài đặt của riêng bạn sẽ hơi khó khăn, bởi vì bạn sẽ phải đối phó với khả năng phiên bản Python sai đã được cài đặt. Bạn phải cài đặt cạnh nhau, để ứng dụng của bạn có thể truy cập phiên bản Python mới được cài đặt, nhưng mọi ứng dụng hiện có vẫn tiếp tục sử dụng phiên bản Python cũ. (tức là không làm hỏng những thứ như hiệp hội tập tin .py hoặc PATH)
Jonathan Hartley

Nhiều khả năng trình cài đặt của bạn sẽ kiểm tra sự tồn tại của phiên bản Python phù hợp và nếu tìm thấy nó, hãy sử dụng nó, nếu không thì cài đặt python như một phần của quá trình cài đặt.
Justin Standard

Phải - nhưng tùy chọn thứ hai đó 'nếu không thì cài đặt python như một phần của quá trình cài đặt', chính xác là những gì tôi đang nói. Đó sẽ là khó khăn, vì những lý do tôi đã đưa ra.
Jonathan Hartley

0

Bạn có thể sử dụng appJarđể phát triển GUI cơ bản.

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 khi chạy

Xem tài liệu tại trang appJar .

Cài đặt được thực hiện với pip install appjartừ dòng lệnh.


0

!!! KIVY !!!

Tôi đã rất ngạc nhiên khi thấy không ai nhắc đến Kivy !!!

Tôi đã từng thực hiện một dự án bằng Tkinter, mặc dù họ ủng hộ rằng nó đã được cải thiện rất nhiều, nhưng nó vẫn mang lại cho tôi cảm giác về windows 98, vì vậy tôi đã chuyển sang Kivy .

Tôi đã theo dõi một loạt hướng dẫn nếu nó giúp ...

Chỉ cần đưa ra ý tưởng về vẻ ngoài của kivy, hãy xem cái này (Dự án tôi đang thực hiện):

Dự án mà tôi đang làm

Và tôi đã làm việc với nó trong gần một tuần nay! Những lợi ích cho Kivy bạn yêu cầu? Kiểm tra cái này

Lý do tại sao tôi chọn cái này là, cái nhìn của nó và nó cũng có thể được sử dụng trong điện thoại di động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.