はじめに
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を実装してみましょう。
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バインディングが公式でサポートされ始めたので是非使ってみてください!