Создайте напрямую исполняемое кроссплатформенное приложение с графическим интерфейсом пользователя с помощью Python

Python работает на нескольких платформах и может использоваться для настольных и веб-приложений, поэтому я прихожу к выводу, что есть способ скомпилировать его в исполняемый файл для Mac, Windows и Linux.

Проблема в том, что я понятия не имею, с чего начать или как написать с ним графический интерфейс, может ли кто-нибудь пролить свет на это и указать мне в правильном направлении, пожалуйста?


person Teifion    schedule 05.08.2008    source источник


Ответы (13)


Сначала вам понадобится некоторая библиотека графического интерфейса с привязками Python, а затем (если хотите) некоторая программа, которая преобразует ваши скрипты Python в автономные исполняемые файлы.

Кросс-платформенные библиотеки графического интерфейса с привязками Python (Windows, Linux, Mac)

Конечно, их много, но самые популярные, которые я видел в дикой природе, это:

  • Tkinter - на основе Tk GUI toolkit (де-факто стандартная библиотека GUI для python, бесплатная для коммерческих проектов)
  • WxPython - на основе WxWidgets (популярные, бесплатные для коммерческих проектов)
  • Qt с использованием привязки PyQt или Qt для Python. Первое не является бесплатным для коммерческих проектов. Последний менее зрелый, но его можно использовать бесплатно.

Полный список находится на странице http://wiki.python.org/moin/GuiProgramming.

Один исполняемый файл (все платформы)

  • PyInstaller - самый активный (также может использоваться с PyQt)
  • fbs - если вы выбрали Qt выше

Один исполняемый файл (Windows)

  • py2exe - раньше был самым популярным

Один исполняемый файл (Linux)

  • Freeze - работает так же, как py2exe, но нацелен на платформу Linux.

Один исполняемый файл (Mac)

  • py2app - опять же, работает как py2exe, но нацелен на Mac OS.
person Community    schedule 05.08.2008
comment
Поговорим о pyinstaller для Windows, а не о py2exe. - person changelog; 15.10.2008
comment
Стоит отметить, что с 4.5 QT будет находиться под LGPL. - person CTT; 20.02.2009
comment
... вот почему вам сейчас следует серьезно подумать об использовании PySide, который является LGPL. Он также более Pythonic, чем PyQt4 Python 2 API. - person Chris Morgan; 07.12.2010
comment
Вы также можете добавить cx_Freeze, который является кроссплатформенным, обслуживается и поддерживает Python 3. Икс. - person fbmd; 16.02.2012
comment
Почему здесь нет упоминания о Киви? Разве это не подходящий вариант для этого вопроса? - person SilSur; 02.10.2018
comment
Я пытался создать exe на ubuntu 18.4 для Windows с py2exe, но это только для сборки в Windows. вы не можете собрать из других ОС. Вместо этого я решил использовать pyinstaller - person Javad Norouzi; 20.05.2020
comment
Входит ли BeeWare в этот список? Я попытался задать отдельный вопрос, но был отклонен как не по теме, хотя это кажется простым (и полезным) списком инструментов. stackoverflow.com/questions/63157043/ - person M T; 29.07.2020

Другая система (еще не упомянутая в принятом ответе) - это PyInstaller, которая работала для моего проекта PyQt, когда py2exe - нет. Мне показалось, что это проще в использовании.

http://www.pyinstaller.org/

Pyinstaller основан на установщике Python Гордона Макмиллана. Которая больше не доступна.

person Jamie    schedule 28.08.2008
comment
И более чем через 3 года после того, как этот ответ был написан, pyinstaller все еще не поддерживает Python 3 и не указан в дорожной карте будущих выпусков. Я имею в виду, действительно ли поддержка AIX и Solaris более полезна, чем Python 3? - person Dave; 10.11.2011
comment
Теперь он поддерживает Python 2.7 и Python 3.3, 3.4 и 3.5. - person Katu; 05.03.2016
comment
И 3.6 тоже сейчас. - person Rexcirus; 14.10.2017

Альтернативой py2exe является инструмент bbfreeze, который генерирует исполняемые файлы для Windows и Linux. Он новее py2exe и неплохо обрабатывает яйца. Я обнаружил, что он волшебным образом работает лучше без настройки для самых разных приложений.

person Michael Twomey    schedule 15.08.2008

Также существует PyGTK, который по сути представляет собой оболочку Python для Gnome Toolkit. Мне было легче осмыслить, чем Tkinter, потому что раньше я практически ничего не знал о программировании с графическим интерфейсом. Он работает очень хорошо и имеет несколько хороших руководств. К сожалению, установщика Python 2.6 для Windows еще нет, и, возможно, его не будет в ближайшее время.

person Tofystedeth    schedule 05.11.2008

Поскольку python теперь установлен почти во всех ОС, отличных от Windows, по умолчанию, единственное, в чем вам действительно нужно убедиться, - это установить все нестандартные библиотеки, которые вы используете.

Сказав это, можно создавать исполняемые файлы, которые включают интерпретатор python и любые используемые вами библиотеки. Однако это может привести к созданию большого исполняемого файла.

MacOS X даже включает поддержку в Xcode IDE для создания полностью автономных приложений с графическим интерфейсом. Их может запустить любой пользователь OS X.

person Matthew Schinckel    schedule 06.08.2008

Для самого графического интерфейса:

PyQT в значительной степени является справочным материалом.

Другой способ разработать быстрый пользовательский интерфейс - написать веб-приложение, запустить его локально и отобразить приложение в браузере.

Кроме того, если вы выберете вариант Tkinter, предложенный lubos hasko, вы можете попробовать Portablepy, чтобы ваше приложение запускалось в среде Windows без Python.

person fulmicoton    schedule 19.08.2008

Я не уверен, что это лучший способ сделать это, но когда я развертываю приложения Ruby GUI (не Python, но с той же «проблемой», что и .exe) в Windows, я просто пишу короткая пусковая установка на C #, которая вызывает мой основной скрипт. Он компилируется в исполняемый файл, а затем у меня есть исполняемый файл приложения.

person Brian Warshaw    schedule 15.08.2008
comment
@Brian Вы видели метод _почему для самообороны? запускаете приложения для обуви? Вероятно, это можно было бы сделать с программами, не относящимися к обуви. - person Adam Lassek; 18.08.2008
comment
Для этих приложений никто из моих пользователей не анонимен. Я знаю, есть ли у них среда выполнения, а если нет, я могу установить ее для них. Основная проблема в этом разделе заключается в том, как запускать эти приложения без необходимости открывать командную строку и вводить исполняемый файл среды выполнения, за которым следует имя программы. - person Brian Warshaw; 03.03.2010

PySimpleGUI является оболочкой для tkinter и работает на Python 3 и 2.7. Он также работает на Qt, WxPython и в веб-браузере, используя один и тот же исходный код для всех платформ.

Вы можете создавать собственные графические интерфейсы, которые используют все те же виджеты, которые вы найдете в 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

person Mike from PSG    schedule 09.10.2018

# 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, например, чтобы поместить в одну папку все файлы, необходимые для запуска приложения, даже если у пользователя нет python на своем компьютере (я говорю об окнах ... для яблочной ОС нет необходимости исполняемого файла, я думаю, поскольку он поставляется с питоном без необходимости его установки.

Создать этот файл

1) Создайте setup.py

с этим кодом:

from distutils.core import setup
import py2exe

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

сохраните это в папке

2) Поместите свою программу в ту же папку с setup.py, поместите в эту папку программу, которую вы хотите сделать распространяемой: es: l4h.py

ps: измените имя файла (с l4h на любое другое, это пример)

3) Запустите cmd из этой папки (в папке щелкните правой кнопкой мыши + shift и выберите здесь start cmd)
4) напишите в cmd:> python setup.py py2exe
5) в папке dist есть все файлы, которые вам нужны
6) вы можете заархивировать их и распространить

Pyinstaller

Установите его из cmd

**

pip install pyinstaller

**

Запускаем его из cmd из папки, где находится файл

**

pyinstaller file.py

**

person Giovanni G. PY    schedule 31.01.2017

!!! КИВИ !!!

Я был поражен, увидев, что никто не упомянул Киви !!!

Однажды я реализовал проект с использованием Tkinter, хотя они и утверждают, что он значительно улучшился, он по-прежнему дает мне ощущение Windows 98, поэтому я переключился на Киви.

Я слежу за серией руководств, если это помогает ...

Чтобы дать представление о том, как выглядит kivy, посмотрите это (проект, над которым я работаю):

Проект, над которым я работаю

И вот уже неделю работаю над этим! Вы спросите, какие преимущества для Киви? Проверьте это

Причина, по которой я выбрал это, - его внешний вид и то, что его также можно использовать на мобильных устройствах.

person Ritveak    schedule 10.01.2020

Вам не нужно компилировать python для Mac / Windows / Linux. Это интерпретируемый язык, поэтому вам просто нужно установить интерпретатор Python в выбранной вами системе (он доступен для всех трех платформ).

Что касается библиотеки графического интерфейса, которая работает на разных платформах, библиотека виджетов Python Tk / Tcl работает очень хорошо, и я считаю достаточно кроссплатформенный.

Tkinter - это интерфейс Python для Tk / Tcl.

На веб-странице проекта Python:

Tkinter - не единственный инструментарий GuiProgramming для Python. Однако он является наиболее часто используемым и почти единственным, который переносится между Unix, Mac и Windows.

person Justin Standard    schedule 05.08.2008
comment
Итак, как бы вы сделали установочный пакет для развертывания в системах людей, которым нужна всего лишь одноэтапная установка (например, дважды щелкните один установочный пакет в Windows)? - person Craig McQueen; 03.07.2009
comment
Для этого есть несколько подходов, о которых я знаю: вы, вероятно, напишете установщик в пакетном сценарии или скомпилируете для целевой системы, который удалит необходимые файлы где-нибудь и установит необходимые библиотеки и среды выполнения в процессе. - person Justin Standard; 08.07.2009
comment
Установка Python как части вашей собственной установки будет немного неудобной, потому что вам придется иметь дело с возможностью того, что уже установлена ​​неправильная версия Python. Вам придется установить параллельно, чтобы ваше приложение могло получить доступ к недавно установленной версии Python, но все существующие приложения продолжали использовать старую версию Python. (т.е. без испорчения таких вещей, как ассоциация файлов .py или PATH) - person Jonathan Hartley; 20.10.2009
comment
Скорее всего, ваш установщик проверит наличие правильной версии Python, и, если он ее обнаружит, используйте ее, в противном случае установите python как часть процесса установки. - person Justin Standard; 21.10.2009
comment
Верно, но второй вариант «в противном случае установить python как часть процесса установки» - это именно то, о чем я говорю. Это было бы неудобно по причинам, которые я назвал. - person Jonathan Hartley; 09.07.2010
comment
Или просто создайте установщик, который установит дистрибутив Python в комплекте с необходимыми библиотеками, например Python (x, y) (только для Windows и Linux) или Enthought Canopy Express (для Linux, Windows и MacOSX). - person gaborous; 08.08.2013

Вы можете использовать appJar для базовой разработки графического интерфейса.

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()

Графический интерфейс при работе

См. Документацию на сайте appJar.

Установка производится pip install appjar из командной строки.

person shahar_m    schedule 08.06.2017

Вы можете сделать три вещи:

Во-первых, нужно найти GUI Designer, который может запускать свой код как автономные приложения, такие как файлы .exe. Я использую версию MatDeck (для людей, использующих конструкторы графического интерфейса, я рекомендую MD Python Designer), как я считаю (Я использую другую версию, поэтому я не слишком уверен.) Она позволяет мне преобразовывать код в автономные приложения, и, имея его как таковой, нет необходимости устанавливать программное обеспечение на каждый компьютер, на котором будет запускаться программа.

Второй вариант - частично обойти проблему, запустить графический интерфейс как веб-страницу. Это даст вам максимальную совместимость, поскольку большинство, если не все ОС, могут его использовать. Еще раз, вам понадобится GUI Designer, который может преобразовывать свои компоненты в веб-совместимый формат. Я делал это однажды и использовал ту же версию MatDeck (Visionary Deck), на этот раз я бы не рекомендовал MD Python Designer, поскольку не знаю, сможет ли он превратить свои графические интерфейсы в веб-сайты с помощью веб-сборки, тогда как Visionary Deck у меня попробовал и проверил. Как и во всем, что, скорее всего, есть и другое программное обеспечение, я часто использую его, потому что я много работаю с математикой и физикой.

Третий вариант также позволяет обойти проблему, но сделайте это в Tkinter и просто убедитесь, что у вас есть Python IDE или просто старый Python, и запустите код, это запустит графический интерфейс. Это хорошее решение и, возможно, самое простое, но я бы не стал считать его самым коротким или лучшим. Если вы планируете переключаться между несколькими операционными системами и компьютерами, это, вероятно, будет вашим лучшим выбором.

person AnthonySimons    schedule 10.04.2021