0

変数のステータス メッセージを表示する 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 を使用しています。

何か案は?

4

0 に答える 0