インジケーターを使用する必要があるアプリケーションを作成しています。過去にPyGTKとGTK2を使用してこれを実行しました。このドキュメントを参照として使用します: https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Python_version
ただし、それはPyGTKおよびGTK2でのみ機能します。それ以来、状況は変化しており、それがどのように機能するかを学ぶために、良いドキュメント、チュートリアル、または良い例を見つける必要があります。
また、前述のドキュメントでまったく説明されていないことの1つは、インジケーターにサブメニューを追加する方法です。同じツールを使用してカテゴリインジケータを統合する方法と同様に、誰かがこれに何らかの光を当てることができることを願っています。
ありがとう。
This は、gtk3の試用コードであり、 GPaste のインジケーターを作成するappindicatorです。
基本的に、
from gi.repository import AppIndicator3 as AppIndicator
パッケージgir1.2-appindicator3
で提供されるgtk3アプリケーションにappindicatorを使用するため。
こちらが AppIndicator のドキュメントです。
pygtk はGtk3で廃止される予定です。 GObject-Introspection PythonでGtk3アプリケーションを開発するためのルートを通過する必要があります。 PyGObject documentation を参照できます。の代わりに
import pygtk, gtk, gdk, gobject, pango
など
from gi.repository import Gtk, Gdk, Pango, GObject
動作するコードを調べるには、 Kazam を表示できます。これはgtk2からgtk3に移動し、 appindicator を使用します。
パッケージgir1.2-appindicator
もあります。これはpython-appindicator
を使用するのと同じように見えますが、両方ともgtk2アプリケーションの使用法を提供します。
from gi.repository import AppIndicator
OR
import appindicator
このブログ投稿 にもいくつかの情報があります。
これは、設定ウィンドウ、メインウィンドウ、アプリインジケーターを備えた愚かなシンプルなscaffoldアプリケーションです。
#!/usr/bin/env python3.3
from gi.repository import Gtk
from gi.repository import AppIndicator3 as appindicator
class MyIndicator:
def __init__(self, root):
self.app = root
self.ind = appindicator.Indicator.new(
self.app.name,
"indicator-messages",
appindicator.IndicatorCategory.APPLICATION_STATUS)
self.ind.set_status (appindicator.IndicatorStatus.ACTIVE)
self.menu = Gtk.Menu()
item = Gtk.MenuItem()
item.set_label("Main Window")
item.connect("activate", self.app.main_win.cb_show, '')
self.menu.append(item)
item = Gtk.MenuItem()
item.set_label("Configuration")
item.connect("activate", self.app.conf_win.cb_show, '')
self.menu.append(item)
item = Gtk.MenuItem()
item.set_label("Exit")
item.connect("activate", self.cb_exit, '')
self.menu.append(item)
self.menu.show_all()
self.ind.set_menu(self.menu)
def cb_exit(self, w, data):
Gtk.main_quit()
class MyConfigWin(Gtk.Window):
def __init__(self, root):
super().__init__()
self.app = root
self.set_title(self.app.name + ' Config Window')
def cb_show(self, w, data):
self.show()
class MyMainWin(Gtk.Window):
def __init__(self, root):
super().__init__()
self.app = root
self.set_title(self.app.name)
def cb_show(self, w, data):
self.show()
class MyApp(Gtk.Application):
def __init__(self, app_name):
super().__init__()
self.name = app_name
self.main_win = MyMainWin(self)
self.conf_win = MyConfigWin(self)
self.indicator = MyIndicator(self)
def run(self):
Gtk.main()
if __== '__main__':
app = MyApp('Scaffold')
app.run()
誰かが便利だと思うかもしれないので、Python、GIR、GTK3を使用して最小限のアプリインジケーターを作成しました。/proc/cpuinfoからCPU速度を数秒ごとに読み取り、表示します。
こちらをご覧ください: https://bitbucket.org/cpbotha/indicator-cpuspeed/src
CPU温度の読み取りの例を次に示します。スクリプトディレクトリにtemp-icon.png/svgという名前のアイコンをコピーします
from gi.repository import Gtk, GLib
from gi.repository import AppIndicator3 as appindicator
import os
def cb_exit(w, data):
Gtk.main_quit()
def cb_readcputemp(ind_app):
# get CPU temp
fileh = open(
'/sys/devices/platform/thinkpad_hwmon/subsystem/devices/coretemp.0/temp1_input',
'r')
ind_app.set_label(fileh.read(2), '')
fileh.close()
return 1
ind_app = appindicator.Indicator.new_with_path (
"cputemp-indicator",
"temp-icon",
appindicator.IndicatorCategory.APPLICATION_STATUS,
os.path.dirname(os.path.realpath(__file__)))
ind_app.set_status (appindicator.IndicatorStatus.ACTIVE)
# create a menu
menu = Gtk.Menu()
menu_items = Gtk.MenuItem("Exit")
menu.append(menu_items)
menu_items.connect("activate", cb_exit, '')
menu_items.show()
ind_app.set_menu(menu)
GLib.timeout_add(500, cb_readcputemp, ind_app)
Gtk.main()