2

私はGnome用の小さなパネルアプレットを書き始めています。ユーザーがステータスアイコンを左クリックして、ボリュームを設定できるGnome 3のサウンドアイコンなど、いくつかのオプションと情報を表示できるようにしたいと思います右クリックで環境設定を設定しながら、左クリックで。右クリックのコードは次のとおりです。

statusicon.connect("popup-menu", right_button_click)

ここright_button_clickで、右クリック イベントで呼び出される関数の名前です。重要な部分は"popup-menu". 左クリックイベントを設定するための代替手段は何ですか?

4

3 に答える 3

1

最初に、ボリューム コントロールの gnome コードを調べます。これがこれ です。2 番目に、GtkStatusIcon の API ドキュメントを調べる必要があります。それはここ にあります。これで十分です。

于 2011-07-22T12:20:40.980 に答える
0

これは遅い応答ですが、他の誰かが gtkstatusicon の左クリック コントロールを探している場合に備えて、これを投稿しています。

直接の代替手段は

statusicon.connect("activate", left_button_click)

これは、(一般的な) 右クリックの代わりに左クリックで動作するトレイ アイコン ポップアップ メニューのサンプルです。

#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk

class TrayIcon(gtk.StatusIcon):
    def __init__(self):
        gtk.StatusIcon.__init__(self)
        self.set_from_icon_name('help-about')
        self.set_has_tooltip(True)
        self.set_visible(True)
        self.connect("activate", self.on_click)

    def greetme(self,data=None):  
        msg=gtk.MessageDialog(None, gtk.DIALOG_MODAL,gtk.MESSAGE_INFO, gtk.BUTTONS_OK, "Greetings")
        msg.run()
        msg.destroy()

    def on_click(self,data): 
        event=gtk.get_current_event()
        btn=event.button #this gets the button value of gtk event.
        time=gtk.get_current_event_time() # required by menu popup. 

        menu = gtk.Menu()
        menu_item1 = gtk.MenuItem("First Entry")
        menu.append(menu_item1)
        menu_item1.connect("activate", self.greetme)

        menu_item2 = gtk.MenuItem("Quit")
        menu.append(menu_item2)
        menu_item2.connect("activate", gtk.main_quit)

        menu.show_all()
        menu.popup(None, None, None, btn, time) 
        #button can be hardcoded (i.e 1) but time must be correct.

if __name__ == '__main__':
    tray = TrayIcon()
    gtk.main()

また、この代替手段があります:

statusicon.connect("button-press-event", button_click)

次のサンプル コードは、右クリックと左クリックの両方で gtktrayicon の同じポップアップ メニューを表示します。

#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk

class TrayIcon(gtk.StatusIcon):
    def __init__(self):
        gtk.StatusIcon.__init__(self)
        self.set_from_icon_name('help-about')
        self.set_has_tooltip(True)
        self.set_visible(True)
        self.connect("button-press-event", self.on_click)

    def greetme(self,data=None):  
        msg=gtk.MessageDialog(None, gtk.DIALOG_MODAL,gtk.MESSAGE_INFO, gtk.BUTTONS_OK, "Greetings")
        msg.run()
        msg.destroy()

    def on_click(self,data,event):
    #event in this case is sent by the status icon connect. 
        btn=event.button 
        #By controlling this event.button value (1-2-3 for left-middle-right click) you can call other functions.
        time=gtk.get_current_event_time() # required by the popup. 

        menu = gtk.Menu()
        menu_item1 = gtk.MenuItem("First Entry")
        menu.append(menu_item1)
        menu_item1.connect("activate", self.greetme) 

        menu_item2 = gtk.MenuItem("Quit")
        menu.append(menu_item2)
        menu_item2.connect("activate", gtk.main_quit)

        menu.show_all()
        menu.popup(None, None, None, btn, time) 

if __name__ == '__main__':
    tray = TrayIcon()
    gtk.main()

上記のコードが役立つことを願っています。ジョージ V.

于 2016-10-13T12:29:56.077 に答える