23
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

QtAdvent Calendar 2018

Day 16

使ってみよう!Qt for Python

Last updated at Posted at 2018-12-17

はじめに

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バインディングが公式でサポートされ始めたので是非使ってみてください!

23
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?