Pythonを使用して直接実行可能なクロスプラットフォームGUIアプリを作成するにはどうすればよいですか?


263

Pythonは複数のプラットフォームで動作し、デスクトップおよびWebアプリケーションで使用できるため、Mac、Windows、およびLinuxの実行可能ファイルにコンパイルする方法があると結論付けています。

問題は、どこから始めればいいのか、それを使ってGUIを書く方法がわからないことです。誰かがこれに光を当てて、正しい方向に向けることができますか?

回答:


285

最初に、Pythonバインディングを含むGUIライブラリが必要です。次に、(必要に応じて)pythonスクリプトをスタンドアロンの実行可能ファイルに変換するプログラムが必要です。

Pythonバインディングを備えたクロスプラットフォームGUIライブラリ(Windows、Linux、Mac)

もちろん、たくさんありますが、私が野生で見た中で最も人気があるのは:

完全なリストはhttp://wiki.python.org/moin/GuiProgrammingにあります

単一の実行可能ファイル(すべてのプラットフォーム)

  • PyInstaller-最もアクティブです(でも使用できますPyQt
  • fbs-上記のQtを選択した場合

単一の実行可能ファイル(Windows)

単一の実行可能ファイル(Linux)

  • フリーズ -py2exeと同じように機能しますが、Linuxプラットフォームをターゲットにしています

単一の実行可能ファイル(Mac)

  • py2app-再び、py2exeのように機能しますが、Mac OSをターゲットにします

19
py2exeの代わりに、Windowsのpyinstallerについて話します。
ログ

8
4.5 QTの時点でLGPLに準拠することに注意してください。
CTT、

14
...あなたは今、非常に多くの使用を検討してください理由であるPySide である LGPLを。また、PyQt4のPython 2 APIよりもPythonicです。
Chris Morgan、

4
クロスプラットフォームであり、維持され、Python 3.xをサポートするcx_Freezeを追加することもできます。
fbmd

2
なぜここにKivyの言及がないのですか?この質問には有効なオプションではありませんか?
SilSur 2018年

56

別のシステム(まだ受け入れられていない回答には記載されていません)はPyInstallerです。使いやすいと思いました。

http://www.pyinstaller.org/

PyinstallerはGordon McMillanのPythonインストーラーに基づいています。これはもう利用できません。


1
そして、回答が書かれてから3年以上経過したpyinstaller STILLは、Python 3をサポートしていません。また、将来のリリースのロードマップに記載されていません。つまり、AIXとSolarisのサポートはPython 3よりも本当に便利ですか?
Dave

11
現在、Python 2.7およびPython 3.3、3.4、3.5をサポートしています。
Katu

4
そして3.6も今。
Rexcirus 2017年

14

py2exeの代替ツールはbbfreezeで、WindowsおよびLinuxの実行可能ファイルを生成します。py2exeよりも新しく、卵を非常にうまく処理します。多種多様なアプリケーションの設定なしで、魔法のようにうまく機能することがわかりました。


11

PyGTKもあり、これは基本的にGnome ToolkitのPythonラッパーです。以前はGUIプログラミングの知識がほとんどなかったため、Tkinterよりも自分の心を包み込む方が簡単だと思いました。それはかなりうまくいき、いくつかの良いチュートリアルがあります。残念ながら、Windows用のPython 2.6のインストーラーはまだありませんし、しばらくの間はないかもしれません。


6

現在、PythonはデフォルトでWindows以外のほぼすべてのOSにインストールされているため、実際に確認する必要があるのは、使用するすべての非標準ライブラリがインストールされていることだけです。

そうは言っても、Pythonインタープリターと使用するライブラリーを含む実行可能ファイルをビルドすることは可能です。ただし、これにより大きな実行可能ファイルが作成される可能性があります。

MacOS Xには、完全なスタンドアロンGUIアプリを作成するためのXcode IDEのサポートさえ含まれています。これらは、OS Xを実行しているすべてのユーザーが実行できます。


6

GUI自体の場合:

PyQTはほとんどリファレンスです。

迅速なユーザーインターフェースを開発するもう1つの方法は、ウェブアプリを作成してローカルで実行し、アプリをブラウザに表示することです。

さらに、lubos haskoによって提案されたTkinterオプションを使用する場合は、portablepyを試して、PythonのないWindows環境でアプリを実行することをお勧めします。


4

これが最善の方法かどうかはわかりませんが、Ruby GUIアプリ(Pythonではなく、.exeに関する限り同じ「問題」)をWindowsにデプロイするときは、メインスクリプトを呼び出すC#の短いランチャー。コンパイルして実行可能ファイルにしてから、アプリケーションの実行可能ファイルを作成します。


@ブライアン靴を自己実行するための_whyのテクニックを見たことがありますか?それはおそらく非靴のプログラムで行うことができます。
Adam Lassek

これらのアプリの場合、私のユーザーは誰も匿名ではありません。彼らがランタイムを持っているかどうかはわかっていますが、持っていない場合はインストールできます。このトピックの主な関心事は、コマンドプロンプトを開いてランタイムの実行可能ファイルを入力し、その後にプログラム名を入力せずに、これらのアプリケーションを起動する方法です。
ブライアンワーショー

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を使用して、ユーザーが自分のPCでpythonを使用していなくても、アプリを実行するために必要なすべてのファイルを1つのフォルダーに取り込む必要があります(Windowsについて話している...アップルOSの場合は必要ありません)実行可能ファイルの場合、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を押し、ここで[cmdを開始]を選択します)
4)cmd:> python setup.py py2exeと書き込み
ます5)distフォルダーに必要なすべてのファイルがあります
6)あなたは圧縮して配布できます

pyinstaller

cmdからインストール

**

pipインストールpyinstaller

**

ファイルがあるフォルダのcmdから実行します

**

pyinstaller file.py

**


2

PySimpleGUIはtkinterをラップし、Python 3および2.7で動作します。また、Qt、WxPython、およびWebブラウザーで実行され、すべてのプラットフォームで同じソースコードを使用します。

tkinterにある同じウィジェット(スライダー、チェックボックス、ラジオボタンなど)をすべて利用するカスタムGUIを作成できます。コードは非常にコンパクトで読みやすい傾向があります。

#!/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 Documentationで説明されているように、実行する.EXEファイルビルドするには

pyinstaller -wF MyGUIProgram.py


1

Mac / Windows / Linux用にpython をコンパイルする必要はありません。これはインタープリター型言語であるため、選択したシステムにPythonインタープリターをインストールするだけで済みます(3つのプラットフォームすべてで使用可能です)。

クロスプラットフォームで機能するGUIライブラリについては、PythonのTk / Tclウィジェットライブラリは非常によく機能し、十分にクロスプラットフォームであると私は信じています。

TkinterはTk / Tclへのpythonインターフェイスです

PythonプロジェクトのWebページから:

TkinterはPython用の唯一のGuiProgrammingツールキットではありません。ただし、これは最も一般的に使用されるものであり、Unix、Mac、Windows間で移植可能なものはほとんどありません。


4
では、1ステップのインストール(たとえば、Windowsで単一のインストールパッケージをダブルクリック)だけをしたい人のシステムに展開するインストールパッケージをどのように作成しますか?
クレイグマックイーン

そのため、私が知っているいくつかのアプローチがあります。おそらくインストーラをバッチスクリプトで作成するか、ターゲットシステム用にコンパイルして、必要なファイルをどこかにドロップし、プロセスに必要なライブラリとランタイムをインストールします。
ジャスティンスタンダード

1
自分のインストールの一部としてPythonをインストールするのは少し面倒です。なぜなら、間違ったバージョンのPythonがすでにインストールされている可能性に対処する必要があるからです。アプリケーションが新しくインストールされたバージョンのPythonにアクセスできるように、サイドバイサイドでインストールする必要がありますが、既存のアプリケーションは古いバージョンのPythonを引き続き使用します。(つまり、.pyファイルの関連付けやPATHなどを台無しにしないでください)
Jonathan Hartley

多くの場合、インストーラーは適切なバージョンのPythonが存在するかどうかをチェックし、見つかった場合はそれを使用します。それ以外の場合は、インストールプロセスの一部としてpythonをインストールします。
ジャスティンスタンダード

そうですが、2番目のオプション「インストールプロセスの一部としてpythonをインストールする」は、まさに私が話していることです。私が与えた理由から、それは厄介です。
ジョナサンハートレー

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に言及していないのを見て私は驚きました!!!

Tkinterを使用してプロジェクトを行ったことがありますが、Tkinterは大幅に改善されたと主張していますが、それでもWindows 98の雰囲気が残っているため、Kivyに切り替えました。

それが役立つ場合、私はチュートリアルシリーズに従っています...

kivyがどのように見えるかのアイデアを与えるために、これを見てください(私が取り組んでいるプロジェクト):

私が取り組んでいるプロジェクト

そして、私は今やっと一週間もそれに取り組んでいます!あなたが求めるKivyのメリットは?これをチェック

私がこれを選んだ理由は、その外観とモバイルでも使用できることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.