Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyGObject-状态图标上的左键单击菜单_Python_Gtk_Gnome_Pygobject - Fatal编程技术网

Python PyGObject-状态图标上的左键单击菜单

Python PyGObject-状态图标上的左键单击菜单,python,gtk,gnome,pygobject,Python,Gtk,Gnome,Pygobject,我开始为Gnome编写一个小面板小程序,我希望用户能够左键单击状态图标以查看一些选项和信息,例如,类似于Gnome 3中的声音图标,您可以通过左键单击设置音量,通过右键单击设置首选项。 右键单击代码如下: statusicon.connect("popup-menu", right_button_click) 其中,right\u button\u click是在右键单击事件中被调用的函数的名称。重要的部分是。设置左键单击事件的替代方法是什么?首先要查看音量控制的gnome代码,这就是 其次,

我开始为Gnome编写一个小面板小程序,我希望用户能够左键单击状态图标以查看一些选项和信息,例如,类似于Gnome 3中的声音图标,您可以通过左键单击设置音量,通过右键单击设置首选项。 右键单击代码如下:

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

其中,
right\u button\u click
是在右键单击事件中被调用的函数的名称。重要的部分是。设置左键单击事件的替代方法是什么?

首先要查看音量控制的gnome代码,这就是 其次,您应该查看GtkStatusIcon的API文档,其中一个是
这应该足够了。

这是一个展示它如何工作的小例子

#!/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()

这是一个迟来的回复,但我只是发布此消息,以防其他人在gtkstatusicon上寻找左键单击控制

直接的选择是

statusicon.connect("activate", left_button_click)
这是trayicon弹出菜单的一个示例,它使用左键单击而不是(常用)右键单击

#!/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.

我需要在python中使用PyGObject(PyGtk的继承者)来实现这一点。@Rainbow这几乎是一样的,因为PyGObject是Gtk+c库的绑定。