web-dev-qa-db-ja.com

AppIndicatorの実行中にメニューエントリを変更する方法

StackOverflowにも同様の質問がありますが、それは私を助けませんでした: 実行中のアイテムの変更 。 StackOverflowで聞いてみましたが、あまりアクティブではない人々: nityインジケーターアプレットでGTKメニューを変更する方法

問題は、Gtk.main()の外側で変化する関数を定義すると、それが実行されることはなく、内部で一度だけ実行されることです。内部で無限ループを作成すると、Gtk.main()は実行されません。これは私のコードです(修正された標準例)。

#!/usr/bin/env python

import sys

from gi.repository import Gtk, Gdk
from gi.repository import AppIndicator3 as appindicator

if __== "__main__":
    ind = appindicator.Indicator.new ("example-simple-client",
                                      "indicator-messages",
                         appindicator.IndicatorCategory.APPLICATION_STATUS)
    ind.set_status (appindicator.IndicatorStatus.ACTIVE)
    ind.set_attention_icon ("indicator-messages-new")

    menu = Gtk.Menu()
    menu_quit = Gtk.MenuItem('Quit')
    def add_item(menu, label):
        menu.append(MenuItem(label))
    menu.append(menu_quit)
    def quit_app(w):
        sys.exit(0)
    menu_quit.connect('activate', quit_app)
    menu_quit.show()
    ind.set_menu(menu)   
    Gtk.main()

コード内の新しいメニュー項目の追加(または既存の変更)はどこに配置しますか?私はGUIプログラミングの本当の初心者です...

3
Phlya

使用する必要があります

GLib.timeout_add(10, handler_timeout)

インジケータコード内で、10-は10ミリ秒、更新間隔、およびhandler_timeout-更新のたびに呼び出される関数です。この関数内では、クリップボードの変更の確認やメニューの編集など、必要なすべてのことを実行できます。

3
Phlya