【Python】GUIアプリを作ってみる【PyQt編】※初心者向け


管理人
pythonのGUIライブラリ、
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

 

piyo
Windowsでのライブラリのインストールは簡単でした。

 

サンプルプログラム 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_()) #プログラム終了

コメントを書いたので概ね大丈夫かと思いますが、少し補足します。

 

全体の流れは次のようになります。

  1. PyQt5で必ず呼び出すアプリケーションオブジェクトの生成 21行目
  2. ウィンドウクラスのオブジェクト生成 22行目(5~18行目で定義)
  3. ウィンドウの表示 23行目
  4. プログラムを安全に終了するためのメソッド呼び出し 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 widgetsPyQt5 widgets II(ZET CODE)
英語ですがプログラマーのTipsがまとめられているサイトです。
Widgetのサンプルプログラムの参考にさせていただきました。

 

管理人
最後までご覧いただきありがとうございました。