[pygtk] Popup menu for gnome applets.

Pedro Dalcin ppdalcin at gmail.com
Tue Jan 22 22:16:07 WST 2008


I'm trying to create an applet that has a simple popup menu, but my menu
wont pop when I click on the button with the left mouse button, only with
the right mouse button! I really cant figure out what the problem is.... If
any one could help me would be great. Here is my code:
#!/usr/bin/env python

import pygtk
import sys
pygtk.require('2.0')

import gnomeapplet
import gtk

num =3D 0

def factory(applet, iid):

        button =3D gtk.Button()

        button.set_relief(gtk.RELIEF_NONE)
        button.set_label("ExampleButton")
        button.connect("button_press_event", showMenu, applet)
#       button.connect("clicked", on_button_clicked) // im not using
"on_button_clicked right now
        applet.add(button)
        applet.show_all()
        return True


def on_button_clicked(button, *args):
#       button.emit_stop_by_name("button_press_event")
#       create_menu(applet)

#     this is only for change the buttons image
        global num
        if (num%2=3D=3D0):
                image =3D gtk.Image()
                image.set_from_file
("/usr/share/icons/gnome/48x48/devices/gnome-dev-floppy-red.png")
                button.set_image(image)
                button.set_label("")
        else:
                image =3D gtk.Image()
                image.set_from_file
("/usr/share/icons/gnome/48x48/devices/gnome-dev-floppy-green.png")
                button.set_image(image)
                button.set_label("")
        num=3Dnum+1


def showMenu(widget, event, applet):
        global num
        widget.emit_stop_by_name("button_press_event")
        propxml=3D"""
                        <popup name=3D"button3">
                        <menuitem name=3D"Item 3" verb=3D"About" label=3D"_=
About"
pixtype=3D"stock" pixname=3D"gtk-about"/>
                        <menuitem name=3D"file-unlock"
verb=3D"file-unlock"      label=3D"Unlock File"             pixtype=3D"stoc=
k"
pixname=3D"revelation-unlock" />
                        <menuitem name=3D"file-lock"
verb=3D"file-lock"        label=3D"Lock File"               pixtype=3D"stoc=
k"
pixname=3D"revelation-lock" />
                        <menuitem name=3D"file-reload"
verb=3D"file-reload"      label=3D"Reload File"             pixtype=3D"stoc=
k"
pixname=3D"revelation-reload" />
                        <separator />
                        <menuitem name=3D"revelation"
verb=3D"revelation"       label=3D"Start Revelation"        pixtype=3D"stoc=
k"
pixname=3D"revelation-revelation" />
                        <menuitem name=3D"prefs"
verb=3D"prefs"            label=3D"Preferences"             pixtype=3D"stoc=
k"
pixname=3D"gtk-properties" />
                        <menuitem name=3D"about"
verb=3D"about"            label=3D"About"                   pixtype=3D"stoc=
k"
pixname=3D"gnome-stock-about" />
                        </popup>"""

        verbs =3D [("About", showAboutDialog)]
        applet.setup_menu(propxml, verbs, None)


        if (num%2=3D=3D0):
                image =3D gtk.Image()
                image.set_from_file
("/usr/share/icons/gnome/48x48/devices/gnome-dev-floppy-red.png")
                widget.set_image(image)
                widget.set_label("")
        else:
                image =3D gtk.Image()
                image.set_from_file
("/usr/share/icons/gnome/48x48/devices/gnome-dev-floppy-green.png")
                widget.set_image(image)
                widget.set_label("")
        num=3Dnum+1

def create_menu(applet):
        propxml=3D"""
                        <popup name=3D"button3">
                        <menuitem name=3D"Item 3" verb=3D"About" label=3D"_=
About"
pixtype=3D"stock" pixname=3D"gtk-about"/>
                        <menuitem name=3D"file-unlock"
verb=3D"file-unlock"      label=3D"Unlock File"             pixtype=3D"stoc=
k"
pixname=3D"revelation-unlock" />
                        <menuitem name=3D"file-lock"
verb=3D"file-lock"        label=3D"Lock File"               pixtype=3D"stoc=
k"
pixname=3D"revelation-lock" />
                        <menuitem name=3D"file-reload"
verb=3D"file-reload"      label=3D"Reload File"             pixtype=3D"stoc=
k"
pixname=3D"revelation-reload" />
                        <separator />
                        <menuitem name=3D"revelation"
verb=3D"revelation"       label=3D"Start Revelation"        pixtype=3D"stoc=
k"
pixname=3D"revelation-revelation" />
                        <menuitem name=3D"prefs"
verb=3D"prefs"            label=3D"Preferences"             pixtype=3D"stoc=
k"
pixname=3D"gtk-properties" />
                        <menuitem name=3D"about"
verb=3D"about"            label=3D"About"                   pixtype=3D"stoc=
k"
pixname=3D"gnome-stock-about" />
                        </popup>"""
        verbs =3D [("About", showAboutDialog)]
        applet.setup_menu(propxml, verbs, None)

def showAboutDialog(*arguments, **keywords):
        pass

if len(sys.argv) =3D=3D 2:
        if sys.argv[1] =3D=3D "run-in-window":
                mainWindow =3D gtk.Window(gtk.WINDOW_TOPLEVEL)
                mainWindow.set_title("Ubuntu System Panel")
                mainWindow.connect("destroy", gtk.main_quit)
                applet =3D gnomeapplet.Applet()
                factory(applet, None)
                applet.reparent(mainWindow)
                mainWindow.show_all()
                gtk.main()
                sys.exit()

if __name__ =3D=3D '__main__':
        print "Starting factory"
        gnomeapplet.bonobo_factory("OAFIID:Gnome_Panel_Example_Factory",
gnomeapplet.Applet.__gtype__, "Simple gnome applet example", "1.0", factory)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.daa.com.au/pipermail/pygtk/attachments/20080122/a5366e46/at=
tachment.htm


More information about the pygtk mailing list