我正在尝试使用一个显示可变状态消息的菜单项创建一个 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()
有时,菜单项中的文本数到上万,有时已经停止在前数百。更多详细信息:
###
在阅读了类似 stackoverflow 问题中的一些建议解决方案后,我添加了标记的行。但是,他们没有解决问题。“待处理的事件...”行永远不会出现在终端中。- 以类似的方式更新面板图标完美无缺。如果我同时更新上面的菜单项和应用程序的面板图标,即使在菜单项冻结后,图标也会继续更新。
- 我在 Ubuntu 14.04(Unity 桌面)上使用 Python 2.7.6。
有任何想法吗?