変数のステータス メッセージを表示する 1 つのメニュー項目を持つ appindicator を作成しようとしています。これはしばらくは機能しますが、メニュー項目のテキストの更新が停止します。問題を特定するために作成した、動作しない最小限の例を次に示します。
#!/usr/bin/python
import threading,time
from gi.repository import Gtk
from gi.repository import AppIndicator3 as AppIndicator
i = 0
def tinker_with_menu_item():
global i
while True:
i = i + 1
menu_item.get_child().set_text("We are now at " + str(i) + ".")
menu_item.queue_draw() ###
while Gtk.events_pending(): ###
print "events pending ..." ###
Gtk.main_iteration_do(True) ###
time.sleep(0.01)
menu_item = Gtk.MenuItem('')
menu = Gtk.Menu()
menu.append(menu_item)
menu.show_all()
appindicator = AppIndicator.Indicator.new("my-app-indicator", Gtk.STOCK_INFO, AppIndicator.IndicatorCategory.SYSTEM_SERVICES)
appindicator.set_menu(menu)
appindicator.set_status(AppIndicator.IndicatorStatus.ACTIVE)
thread = threading.Thread(target=tinker_with_menu_item)
thread.daemon = True
thread.start()
Gtk.main()
メニュー項目のテキストが 10,000 単位までカウントされることもあれば、数百単位で停止することもあります。詳細:
###
同様のstackoverflowの質問で提案された解決策を読んだ後、マークされた行を追加しました。ただし、問題は解決しません。「保留中のイベント...」という行が端末に表示されることはありません。- 同様の方法でパネルアイコンを更新すると、問題なく動作します。上記のメニュー項目と appindicator のパネル アイコンの両方を更新すると、メニュー項目がフリーズした後もアイコンが更新され続けます。
- Ubuntu 14.04 (Unity デスクトップ) で Python 2.7.6 を使用しています。
何か案は?