Help us understand the problem. What is going on with this article?

使ってみよう!Qt for Python

More than 1 year has passed since last update.

はじめに

Qtは、C++を使ったクロスプラットフォームって事を前面に押し出した開発フレームワークだったりしてますが、さまざまな言語バインディングされているのをご存知ですか?
現状では、

  • Ruby - QtRuby
  • Perl- PerlQt
  • Python - PyQt、PySide、Qt for Python(PySide2)

などなどが、バインディングされて提供されています。
本記事では、Python で使用できる Qt for Python について説明します。

Qt for Pythonとは

Pythonのバインディングとして、PyQt、PySideがあげられますが、

  • PyQt - 開発元:Riverbank Computing社
  • PySide - 開発元:The Qt Company

が中心となって開発を進めています。
PySideは、Qt開発元から提供されているバインディングであるものの、QtのメジャーバージョンであるQt5シリーズのサポートされておらず、長く開発が止まったままでした。
2016/4月頃にようやく、Qt CompanyのCTOである、Lars Knollからメーリングリストにて
ボチボチやってこまい
って事で徐々に開発が進められ、"Qt for Python"という名前で、Qt5シリーズをサポートする最初のリリースとして2018年6月に発表されました。
"Qt for Python"は、Qt5.11のバージョン以降をサポートしており、現状でサポートされているQt5モジュールリストを見る限り、ほとんどのモジュールをサポートしています。

サポートするPythonバージョン

サポートするPythonのバージョンは、

  • Python 3.5+ and Python 2.7

となってはいますが、WindowsではPython 2.7の公式バイナリパッケージがサポートされていない事から注意が必要です。

使い方

PyPI(Python Package Index)で登録されており、Pythonの環境が入っている方であれば、
次のコマンドにて簡単にQt for PythonをInstallする事が可能です。

$ pip install PySide2

現状(2018/12/15)では、Qt5.12はリリースされているものの、PyPI登録が5.11.2のままだったりしていますが、もう少し待ってはきっと5.12へupdateされると思います。

Qt for Pythonを使ってみよう。

Qtでタスクトレイ常駐アプリをつくろうで使用したQt WidgetをベースにPythonでCodeを実装してみましょう。

main.py
import sys
from PySide2.QtWidgets import QApplication, QSystemTrayIcon, QMenu
from PySide2.QtGui import QIcon


# TrayWidgetクラスは、QSystemTrayIconを継承して作成
class TrayWidget(QSystemTrayIcon):
    def __init__(self, parent=None):
        QSystemTrayIcon.__init__(self, parent)

        # タスクトレイアイコン クリックメニュー登録
        menu = QMenu(parent)
        qt_action = menu.addAction("Qtちゃん")
        qt_action.triggered.connect(self.Message)
        menu.addSeparator()
        quit_action = menu.addAction("&Quit")
        quit_action.triggered.connect(self.Quit)

        # タスクトレイアイコン クリックメニュー設定
        self.setContextMenu(menu)

        # 初期アイコン設定
        self.setIcon(QIcon('QtChanBack.png'))


    # "Qtちゃん"メニューでメッセージ表示
    def Message(self):
        self.showMessage("ゆるキャラ", "Qtちゃんだよ", QIcon('QtChan.png'), 5000 );

    # "Quit"にて、タスクトレイアイコンアプリを閉じる
    def Quit(self):
        QApplication.quit()


def main():
    app = QApplication([])
    tray = TrayWidget()
    # タスクトレイに表示
    tray.show()

    ret = app.exec_()
    sys.exit(ret)


if __name__ == '__main__':
    main()

ほぼ、C++のCodeと同じようなCodeでPythonでも記述することができましたね!

さいごに

Qtでの、Pythonバインディングが公式でサポートされ始めたので是非使ってみてください!

KazuoAsa
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away