[[ノート/ノート]]~
&counter(); &lastmod();~
**PythonアプリのWin上でのexe化 2017-01-01 [#gd7eaab3]
Pythonアプリを(Pythonインタープリタを持っていない)Windows上で動かすために、パッケージ化をすることになるのだが、いくつかの仕組がある。
-cx_Freeze
-PyInstaller
いろいろな人がいろいろ言っていて、よくわからないのだが、cx_Freezeはいろいろ試してみると、どうも指定はいろいろできるが、使い慣れないとうまくいかないみたいだ。
他方、PyInstallerはほとんど何もしなくてよいので便利だが、その分自由度がないのと、もしかすると環境のバージョンに依存して動かなくなることがあるのかもしれない。
***そもそもWindowsへのPythonのインストール [#f11bda29]
裸よりは、Anacondaが楽なようだ。今だとAnaconda3でPython3をインストールしてしまうことになる。
[[Anaconda で Python 環境をインストールする:http://qiita.com/t2y/items/2a3eb58103e85d8064b6]]
に従うと、Anacondaのダウンロードページ [[https://www.continuum.io/downloads]] から(今だとPython3.5を選んで)インストール。3.6は出たてなので、いろいろと足りないものがある。
***PyQt5のインストール [#lda1aceb]
anacondaに入っているみたい。いろいろ入れてみたけれど、anacondaインストール直後で使えた。
***Qt5を使ったサンプルプログラム [#q2b42179]
Windowsアプリの場合はコンソールを介したくない(アイコンをダブルクリックして終わり)という感覚があるので、どうしてもGUIを作りこむ必要がある。PythonでGUIを何にするかも大きな決断だが、割とよく見かけるQtを使ってみる。Qtのバージョンも4がいいのか新しい5がいいのか? ネットを検索すると古いサンプルが多いのだが、まあ新しいバージョンにしておこう。どうしてアッパーコンパチにならないのか?
何もしないウィンドウ
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('Simple')
w.show()
sys.exit(app.exec_())
入力を受け取って階乗を計算するプログラム
#!/usr/bin/env python
from PyQt5.QtWidgets import (QApplication, QWidget,
QGridLayout, QVBoxLayout, QHBoxLayout,
QLabel, QLineEdit, QPushButton)
def factorial(n):
if n < 0:
return -1
elif n == 0:
return 1
else:
return n * factorial(n-1)
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.inputLine = QLineEdit()
self.outputLine = QLineEdit()
self.outputLine.setReadOnly(True)
self.calcButton = QPushButton("&Calc")
self.calcButton.clicked.connect(self.calc)
lineLayout = QGridLayout()
lineLayout.addWidget(QLabel("num"), 0, 0)
lineLayout.addWidget(self.inputLine, 0, 1)
lineLayout.addWidget(QLabel("result"), 1, 0)
lineLayout.addWidget(self.outputLine, 1, 1)
buttonLayout = QVBoxLayout()
buttonLayout.addWidget(self.calcButton)
mainLayout = QHBoxLayout()
mainLayout.addLayout(lineLayout)
mainLayout.addLayout(buttonLayout)
self.setLayout(mainLayout)
self.setWindowTitle("Factorial")
def calc(self):
n = int(self.inputLine.text())
r = factorial(n)
self.outputLine.setText(str(r))
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
***PyInstallerのインストール [#f2c1399e]
pipで簡単にインストールできる。
pip install pyinstaller
***PyInstallerによるパッケージング [#qb3516ad]
pyinstaller -F --noconsole myfact.py
結果として、ディレクトリdistの下に
2017/01/02 14:32 28,955,732 myfact.exe
ができた。Pythonの実行環境とQtの環境を全部パッケージしているので、29MBと、かなり大きい。
**Qt5プログラミング続き [#k069c2cc]
漢字も問題なく使えるようだが、Windows上でShift-JISで漢字文字列定数を入れると怒られる。エディタでUTF-8でストアするようにしておけば、大丈夫だった。
サンプル集
-[[Qt 定番小ワザ集:http://mf-atelier.sakura.ne.jp/mf-atelier/modules/tips/program/Qt/qt_tips.html]]
-[[【PythonでGUI】PyQt5 -ダイアログ-:http://qiita.com/Algebra_nobu/items/acd3caa625be8eebc09c]]
-
-[[Qt:https://wiki.archlinuxjp.org/index.php/Qt]]
UI作成ツールについて
-[[PyQt5 利用ノート:https://showa-yojyo.github.io/notebook/python-pyqt5.html]] は結構新しめかも。
Windows下でAnaconda3を入れた環境で、(HOME)\Anaconda3\Library\bin\designer.exeを起動すればよいらしい。
パスが通っているらしいので、コマンドプロンプトで単にdesingerとすればよかった。
古いけれどこんなのもあった。
-[[Python3とPyQT5でGUIアプリ作成 〜GUI画面作成編〜:http://vendettaweb.net/?p=125]]