2011-07-21 12 views
2

Gnome用の小さなパネルアプレットを作成し始めています。ユーザーがステータスアイコンを左クリックすると、いくつかのオプションと情報が表示されます。 Gnome 3のサウンドアイコンに似ています。ここでは、右クリックで設定を行いながら左クリックでボリュームを設定できます。 right_button_clickは、右クリックイベントで呼び出される関数の名前ですPyGObject - ステータスアイコンの左クリックメニュー

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

: 右クリックし、コードはこれです。重要な部分は"popup-menu"です。左クリックイベントを設定するための代替手段は何ですか?

答えて

1

まず最初は、ボリュームコントロールのためのGNOMEコードに見ている、とthis 第二に、あなたはGtkStatusIconのためのAPIドキュメントになるはずであることだし、その一つは十分なはずhere です。

+0

私はPythonでPyGObject(PyGtkの後継者)を使ってこれを行う必要があります。 – Rainbow

+0

@Rainbow PyGObjectはGtk + Cライブラリのためのバインディングなので、ほとんど同じことです。 – erick2red

1

これはどのように動作するかを示す小さな例です。

#!/usr/bin/python3 

import gi 
gi.require_version('Gtk', '3.0') 

from gi.repository 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("popup_menu", self.on_secondary_click) 


    def on_secondary_click(self, widget, button, time): 
     menu = Gtk.Menu() 

     menu_item1 = Gtk.MenuItem("First Entry") 
     menu.append(menu_item1) 

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

     menu.show_all() 
     menu.popup(None, None, None, self, 3, time) 

if __name__ == '__main__': 
    tray = TrayIcon() 

    Gtk.main() 
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() 

上記のコードが役立ちます。 George V.

関連する問題