Linuxでシステムトレイにアイコン表示(qt/python)

前回までに、Linuxでシステムトレイにgtk&(C++/python)とqt&C++を使ってアイコン表示をしてみました。

今回はqt&pythonで同じことをしてみます。

実装

Qtの主要なpythonバインディングはPyQtとPySideの2つがあります。PyQtの方が実績がありますが、PySideにもいいところがあるらしく(詳しくない)、どちらがいいかは状況次第なようです。今回はPyQtで実装しています(いつも使ってる環境に入っていたので)。

import sys
from PyQt5.QtWidgets import QSystemTrayIcon, QApplication, QMenu, QAction
from PyQt5.QtGui import QIcon
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    menu = QMenu();
    exitAction = QAction("Exit", menu);
    menu.addAction(exitAction);
    oIcon = QIcon.fromTheme("virtualbox");
    trayIcon = QSystemTrayIcon(oIcon);
    trayIcon.activated.connect(lambda reason: menu.exec());
    exitAction.triggered.connect(lambda checked: app.quit());
    trayIcon.setContextMenu(menu);
    trayIcon.setVisible(True);
 
    exitCode = app.exec_()
    sys.exit(exitCode)

結果

見た目は同じなので省略します。

メモリ

Lubuntu-LXQtでは…

$ ps -eo uid,pid,rss,vsz,args | grep example
 1000  203934 50960 294764 python3 example.py
...
$ 

Neon-KDEでは…

$ ps -eo uid,pid,rss,vsz,args | grep example
 1000    1976 57996 305564 python3 example.py
...
$

51~58MBという結果でした。

まとめ

C++よりは16MB程度余計に消費するようです。およそGtkのときと似たような結果でした。

今までの全データをまとめると以下のとおりです。

ディストリビューションツールキット言語使用メモリ(RSS)[KB]
Lubuntu 20.04Gtk3C++21,908
Lubuntu 20.04Gtk3Python35,068
Lubuntu 20.04Qt5C++ 34,576
Lubuntu 20.04Qt5Python50,960
KDE Neon User Edition(20.04)Gtk3C++44,488
KDE Neon User Edition(20.04)Gtk3Python58,896
KDE Neon User Edition(20.04)Qt5C++41,684
KDE Neon User Edition(20.04)Qt5Python57,996

全般的にC++の方が13~16MBほどメモリ消費が少なく、ツールキットの違いはあるものの、ディストリビューションによる差が大きいので定性的にどちらが有利かは判断できない。

未分類linux,python,qt

Posted by first_user