Blog

pyqt5とpy2appを使って.app形式のGUIアプリケーションを作る

前回無事pyqt5を導入できたので、以下のサイトを参考にGUIアプリケーションを作ってみました。英語ですが非常に分かりやすくて素晴らしかったです。

Your first GUI app with Python and PyQt

ただ、上記のサイトで使っているのはPyQt4で、私が入れたのはPyQt5。まるまるコピーさせて頂きスクリプトを実行したらcommand not foundエラーが出たのでググってみると、PyQt5からはQMainWindowやQApplicationはQtGuiからではなくQtWidgetsから呼び出さなくてはならないとのことでした。

サイトで紹介されていた雛形は、PyQt5では以下のようなスクリプトになりました。

from __future__ import division, print_function, absolute_import

import sys
from PyQt5 import uic, QtWidgets
 
qtCreatorFile = "" # Enter file here.
 
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
 
class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())

無事GUIアプリケーションを作って実行できたところで、せっかくなのでMacのアプリケーションファイルである.appで書き出すところまでやってみました。

使うのはpy2appというライブラリです。

pip install py2app

先ほど作ったスクリプトのディレクトリに移動して、コンソールから

py2applet --make-setup script.py

そして、続けて

python setup.py py2app -A

これで生成される./dist/の中に.app形式のファイルができるのですが、いざ実行してみると「a python runtime not could be located」といったようなエラーが発生しました。

調べてみると、You may need to install a framework build of Pythonということで、pyenvのような環境で導入されたPythonではフレームワークが使えずビルドに失敗しているとのこと。

pyenvで入れたpythonでビルドするのは諦めモードが漂うstackoverflowでしたが、以下のサイトを思い出しました。

pyenvでPythonをFrameworkとしてインストールする

これでゼロからpython2.7.10を再インストール。

$ env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 2.7.10

無事いけたか!と思いきや、またもやエラー。ログを見ると、qtCreatorFile = “”で指定した.uiファイルがnot foundと表示されていたので、フルパスを指定したら無事ちゃんとビルドできて動きました。

This Post Has 0 Comments

Leave A Reply