面倒なのでかいつまんで記載
環境は
Windows10
Python 3.7.6
なおPythonはAnacondaを使用
またエディターはVS Codeを使用
前提として
Python2と3の違い
https://www.sejuku.net/blog/8988ざっくり言うとPython2は今後サポートが切られるので
Python3を使ったほうが良い
Anacondaを使用してるのはPython開発に必要なものを一括でインストールできるため
不要な場合はtake氏の記事通りで問題ない(ハズ)
VisualStudio Codeについて
https://dotinstall.com/lessons/basic_vscodeエディターになるため特に何がいいかは人による
VSCodeを使用してるのは比較的軽く、拡張が容易なため
画面はtake氏の第一回目記事(
https://ch.nicovideo.jp/take_mugen/blomaga/ar1555287)通りQt Desgnerで作成する
その後、コマンドプロンプトを開き、以下のコマンドを入力し、Pythonのモジュールをインストールする
pip install SIP
pip install PyQt5
pip install pyinstaller
上記インストール対象はは以下のサイトを参考にした
PyQt5とpython3によるGUIプログラミング[0]
https://qiita.com/kenasman/items/55505654823e9d040e6epythonプログラムのexe作成方法
https://qiita.com/snowp/items/d70a43af3d77955f6debインストール後、コマンドプロンプトで作成したファイル(ui)ファイルに移動し、以下のコマンドを実行
pyuic5 元ファイル.ui -o 変更後ファイル.py
元ファイルはQt Desgnerで作成したファイル
take氏の第二回記事(
https://ch.nicovideo.jp/take_mugen/blomaga/ar1568344)通りソースコードを作成
エディターはVSCodeを使用した
3の直前まで行ったらSTOP
記述を以下に変更する
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from 前回作成したファイル名(※拡張子不要) import 前回作成したファイルに書かれたclass名
(以下なぜかインデントが反映されていないので(インデント)で表す)
class Option_Menu(QtWidgets.QMainWindow, 前回作成したファイル名(※拡張子不要)):
(インデント)def __init__(self, parent=None):
(インデント)(インデント)super(Option_Menu, self).__init__(parent=parent)
(インデント)(インデント)self.setupUi(self)
if __name__ == "__main__":
(インデント)app = QtWidgets.QApplication(sys.argv)
(インデント)myapp = Option_Menu()
(インデント)myapp.show()
(インデント)sys.exit(app.exec_())
変更後、実行するとQt Desgnerで作成した画面が立ち上がると思う。
次にボタン押下処理を作成する
take氏の第三回記事(
https://ch.nicovideo.jp/take_mugen/blomaga/ar1577532)と違うため注意が必要
上記記述の「self.setupUi(self)」の下に
self.XXX.clicked.connect(self.YYY)
XXXは第2回でQtDesigner内にて命名した、設定変更用のPushButtonの名前を入力
YYYはボタン押下時に実行するメソッド名
記述にすると以下のようになる
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from 前回作成したファイル名(※拡張子不要) import 前回作成したファイルに書かれたclass名
class Option_Menu(QtWidgets.QMainWindow, 前回作成したファイル名(※拡張子不要)):
(インデント)def __init__(self, parent=None):
(インデント)(インデント)super(Option_Menu, self).__init__(parent=parent)
(インデント)(インデント)self.setupUi(self)
# XXXボタン押下処理
(インデント)(インデント)self.XXX.clicked.connect(self.YYY)
# XXXボタン押下処理
(インデント)def YYY(self):
(インデント)(インデント)print("YYY")
if __name__ == "__main__":
(インデント)app = QtWidgets.QApplication(sys.argv)
(インデント)myapp = Option_Menu()
(インデント)myapp.show()
(インデント)sys.exit(app.exec_())
ボタン(XXX)を推すと「YYY」と出力されるはず
後はtake氏の記事通りにファイル読込、書き込みを行えばよい
なお、ファイルの読み書きを行う場合はXX.open()でも問題ないが、
with open(XXX)を使用すればわざわざclose()する必要がなくなる
簡単な使用例
・読み込み
with open(XXX, 'r', encoding='SJIS') as f:
(インデント)f.write(f.read())
・書き込み
with open(XXX, 'w', encoding='SJIS') as f:
(インデント)f.write("ZZZ")
第一引数にファイルパス、第二引数にどのようにファイルを開くか、第三引数に文字コードを渡す
詳しくは以下を参照
Pythonでファイルの読み込み、書き込み(作成・追記)
https://note.nkmk.me/python-file-io-open-with/最後に恐らく頻繁に使うであろうチェックボタン、ラジオボタン、コンボボックスについて軽く触れる
・ラジオボタン
# 判定
if self.radioButton(ラジオボタンの名前).isChecked():
(インデント)print("ラジオボタンが押されている")
# ラジオボタンにチェックを入れる
self.radioButton(ラジオボタンの名前).setChecked(True)
・チェックボタン
# 判定
if self.checkBox(チェックボタンの名前).isChecked():
(インデント)print("チェックボックスにチェックがついている")
# チェックボックスにチェックを入れる Falseでチェックを外す
self.checkBox(チェックボタンの名前).setChecked(True)
・コンボボックス
# コンボボックス 選択されている「順番の値」を取得
print(self.comboBox(コンボボックスの名前).currentIndex())
# コンボボックス 選択されている「値」を取得
print(self.comboBox(コンボボックスの名前).currentText())
# コンボボックス 補足
# 例として以下のようなコンボボックスがあるとする
# 0番目 "AAA"
# 1番目 "BBB"
# 2番目 "CCC"
# コンボボックスで"1"が選択されたとき
# ・currentIndex() -> 0
# ・currentText() -> "CCC"
# が取得できる
# コンボボックス 指定値にする
# 上のコンボボックス補足の「順番の値」をいれる
self.comboBox(コンボボックスの名前).setCurrentIndex(指定値)
長くなったが最後にexe化する
コマンドプロンプトに以下のコマンドを入力する
pyinstaller 作成したコードファイル.py --onefile --noconsole
これでexe化されるはずだ
文章ばかりで画像もない(面倒だった)記事になったので
上記まで(記述書き込みなし)の記述を一通り入れた秋葉-Rのコンフィグをワンドラに上げた
蛇足っぽくなるがコンフィグ設定終了後、メッセージを出したい場合
QMessageBoxを使用するとよい
from PyQt5.QtWidgets import QMessageBox でファイルにインポート
QMessageBox.information(None, '通知', '設定完了', QMessageBox.Yes) でメッセージ通知できるはず
以下を参照
Qt for Python メッセージボックス
https://www.xsim.info/articles/PySide/messagebox.htmlかなりの長文乱文になったが不明点があればお気軽に
(わかる範囲であればいいんだが)
最後になってしまったがtake氏には多大なる感謝を
続きをたたむ