PyQtを試してみました!
PyQtはオープンソース版のライセンスがGPLと厳しいですが、機能が充実しているため、
人気のGUIライブラリの1つとなっています。
PyQtを使って簡単なGUIアプリを作ってみました。
今回は、基礎の基礎をメインにするため、
- PyQtの雰囲気
- 基礎的なKivyの実装方法
をつかんでいただけたらと思います。
PyQtの概要
PyQtは、パイキュートと呼びます。
Wikipediaによりますと、
PyQtは、クロスプラットフォームなGUIツールキットであるQtのPythonバインディングにして、PythonでGUIプログラミングをするときの選択肢の一つである。
PyQtは440のクラスと6000以上の関数とメソッドを持つ。
ライセンス:GNU GPL and commercial
「PyQt」『フリー百科事典 ウィキペディア日本語版』より。
2020年6月30日 (火) 11:20 UTC
URL: https://ja.wikipedia.org/wiki/PyQt
簡単にまとめますと、
- GUIツールキットのQtをPythonで使えるようにしたもの
- GUIウィジェットや機能が豊富
- ライセンスは、「オープンソース版(GPL)」と「商用版(有料)」がある
QtはC++で開発されており、「Google Earth」や「VirtualBox」などの有名なソフトウェアでも使われているため、
実績としては十分かと思います。
参考)Category:Qtを使用するソフトウェア(フリー百科事典 ウィキペディア日本語版)
その他のPythonのGUIライブラリの参考記事
■【Python】GUIライブラリ13個を比較【初心者へのオススメあり】
Pythonのライブラリの特徴やライセンスなどがまとめてあります。
【python】GUIアプリを作ってみる【PyQt編】
開発環境
- OS Windows 10
- Pythonバージョン 3.7.1
- エディタ VS Code
- ライブラリ PyQt5
準備 PyQtのインストール
1.SIPのインストール
pip install SIP
⇒「Successfully installed~」がでればOK
2.PyQt5のインストール
pip install PyQt5
⇒「Successfully installed~」がでればOK
サンプルプログラム Hello World
まずは、ボタンで「Hello World」を表示してみましょう。
ソースコード
import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton from PyQt5.QtGui import QIcon class MainWindow(QWidget): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) # 初期化 self.initUI() # UIの初期化 def initUI(self): # UIの初期化をするメソッド self.resize(400, 300) # ウィンドウの大きさの設定(横幅, 縦幅) self.move(400, 300) # ウィンドウを表示する場所の設定(横, 縦) self.setWindowTitle('PyQt5 sample GUI') # ウィンドウのタイトルの設定 #self.setWindowIcon(QIcon('xxxx.jpg')) # ウィンドウ右上のアイコンの設定 btn = QPushButton('Hello World PyQt5', self) # ボタンウィジェット作成 btn.resize(btn.sizeHint()) # ボタンのサイズの自動設定 btn.move(100, 50) # ボタンの位置設定(ボタンの左上の座標) if __name__ == '__main__': app = QApplication(sys.argv) #PyQtで必ず呼び出す必要のあるオブジェクト main_window = MainWindow() #ウィンドウクラスのオブジェクト生成 main_window.show() #ウィンドウの表示 sys.exit(app.exec_()) #プログラム終了
コメントを書いたので概ね大丈夫かと思いますが、少し補足します。
全体の流れは次のようになります。
- PyQt5で必ず呼び出すアプリケーションオブジェクトの生成 21行目
- ウィンドウクラスのオブジェクト生成 22行目(5~18行目で定義)
- ウィンドウの表示 23行目
- プログラムを安全に終了するためのメソッド呼び出し 24行目
14行目は、画面左上のアイコンに設定する画像を読み込んでいます。
JPGファイルなどをソースコードと同じディレクトリに置いて、コメントアウトを外してください。
実行結果
無事にHello Worldが表示されました。
サンプルプログラム いろいろなウィジェットを表示
ウィジェット(Widget)とは、ボタンなどのGUIパーツのことで、GUIのライブラリごとに用意されています。
ここでは、PyQt5の一部のウィジェットを表示させてみました。
ソースコード
import sys from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QCheckBox, QSlider, QLineEdit, QCalendarWidget, QProgressBar) from PyQt5.QtCore import Qt from PyQt5.QtGui import QIcon class MainWindow(QWidget): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.initUI() def initUI(self): self.setGeometry(400, 300, 600, 800) #self.move(400, 300), self.resize(400, 500)と一緒 self.setWindowTitle('PyQt5 sample GUI 2') self.setWindowIcon(QIcon('simulog.gif')) # ボタン btn = QPushButton('Button', self) btn.move(100, 50) btn.resize(btn.sizeHint()) # sizeHintでいいかんじの大きさにしてくれる # チェックボックス cb = QCheckBox('Check Box', self) cb.move(100, 100) # スライダー sld = QSlider(Qt.Horizontal, self) sld.setGeometry(100, 150, 200, 20) # テキストボックス qle = QLineEdit(self) qle.setGeometry(100, 200, 200, 20) # プログレスバー pbar = QProgressBar(self) pbar.setGeometry(100, 250, 200, 25) # カレンダー cal = QCalendarWidget(self) cal.move(100, 300) if __name__ == '__main__': app = QApplication(sys.argv) #PyQtで必ず呼び出す必要のあるオブジェクト main_window = MainWindow() #ウィンドウクラスのオブジェクト生成 main_window.show() #ウィンドウの表示 sys.exit(app.exec_()) #プログラム終了
各ウィジェットは、MainWindowクラスのinitUIメソッドの中で定義しています。
- ボタンウィジェット 20~22行目
- チェックボックスウィジェット 25,26行目
- スライダーウィジェット 29,30行目
- テキストボックスウィジェット 33,34行目
- プログレスバーウィジェット 37,38行目
- カレンダーウィジェット 41,42行目
実行結果
今回は、ウィジェットの表示だけのため、ボタンやカレンダーを押しても何も起こりません。
ボタンを押したときの動作などをつけたい場合は、各ウィジェットに合わせて作っていただければと思います。
今回の実装はここまで。
まとめ
PyQt5を使って、簡単なGUIを作ることができました。
カレンダーまで用意されており、さすが商用ライセンスのあるライブラリだと思いました。
※少なくともtkinterにはカレンダーウィジェットは存在しない。
次は、ウィジェットに動きをつけてみたいと思います。
最後に、記事を書くにあたって、下記の記事を参考にさせていただきました。
感謝です。
参考にさせていただいた記事
■PyQt5リファレンスガイド
PyQt5の公式ドキュメントです。ライセンスや互換のあるPythonのバージョンなどが書かれています。
本格的に使いたい方は、一読することをお勧めします。
■【Python入門】PyQt5でGUIを作ろう!導入から使い方まで解説
Samurai Blog様の記事です。
インストールの参考にさせていただきました。
■PyQt5でのプログラミングの基本
yu00’s blog様の記事です。
Hello Worldプログラム作成の参考にさせていただきました。
■【PythonでGUI】PyQt5 -始めの一歩-(Qiita)
Nobu12様のQiitaの記事です。
Hello Worldプログラム作成の参考にさせていただきました。
■PyQt5 widgets、PyQt5 widgets II(ZET CODE)
英語ですがプログラマーのTipsがまとめられているサイトです。
Widgetのサンプルプログラムの参考にさせていただきました。