Found a solution.

Basically it is to add

pmg_tk/startup/newmenu.py

file with the following content:

from Tkinter import *
from pymol import cmd

def __init__(self):
    self.menuBar.addmenu('NewMenu', 'Sample Menu')

    self.menuBar.addmenuitem('NewMenu', 'command',
                     'White background',
                     label='White Background',
                    command = lambda : cmd.set("bg_rgb","[1,1,1]"))

    self.menuBar.addmenuitem('NewMenu', 'command',
                     'Black background',
                     label='Black Background',
                     command = lambda : cmd.set("bg_rgb","[0,0,0]"))

This adds the menu.

I got what I wanted with:

# custom scripts:
import imp
imp.load_source('bk_pymols', os.path.expanduser('~/.pymolrc.py'))


from pymol import cmd

def bk_notW ():
    "Makes notW selection."
    cmd.select("notW", "not (resn W)")

def bk_hides_W ():
    "Hides W molecules."
    cmd.hide("all")
    cmd.show("spheres", "not (resn W)")

cmd.set_key('ALT-N', bk_notW)
cmd.set_key('ALT-W', bk_hides_W)

from Tkinter import *
from pymol import cmd

# custom scripts:
import imp, os
imp.load_source('bk_pymols', os.path.expanduser('~/.pymolrc.py'))
from bk_pymols import bk_notW, bk_hides_W


def __init__(self):
    self.menuBar.addmenu('BK', 'My menus!')

    self.menuBar.addmenuitem('BK', 'command',
                     'Makes notW [Alt-n]',
                     label='Makes notW [Alt-n]',
                    command = bk_notW)

    self.menuBar.addmenuitem('BK', 'command',
                     'Hides W mols [Alt-w]',
                     label='Hides W mols [Alt-w]',
                     command = bk_hides_W)

Works like a charm: I have custom menus and I can bind any of its entries to a key.

But I want bk_hides_W to be a toggler. So I need a way to set a state of my defun.
If I do

def bk_toggles_W ():
    "Hides W molecules."
    if cmd.get("bk_toggles_W"):
        cmd.hide("all")
        cmd.show("spheres", "not (resn W)")
        cmd.set("bk_toggles_W", 0)
    else:
        cmd.show("spheres", "resn W")
        cmd.set("bk_toggles_W", 1)

pymol is upset -- I think it is because it doesn't know bk_toggles_W setting:

Error: 1
QuietException Exception in Tk callback
  Function: <function bk_toggles_W at 0x7ff02d90cb90> (type: <type 'function'>)
  Args: ()
Traceback (innermost last):
  File "/usr/lib/python2.7/dist-packages/Pmw/Pmw_1_3/lib/PmwBase.py", line 1747, in __call__
    return apply(self.func, args)
  File "/home/boris/.pymolrc.py", line 67, in bk_toggles_W
    if cmd.get("bk_toggles_W"):
  File "/home/boris/.local/lib/python2.7/site-packages/pymol/setting.py", line 1300, in get
    raise QuietException
QuietException: <pymol.parsing.QuietException instance at 0x7ff018698518>

How can I add the setting to pymol?

--
Boris.
 
On Tue, Oct 23, 2012 at 5:17 PM, Jason Vertrees <jason.vertrees@schrodinger.com> wrote:
Hi Boris,

David Hall's suggestions are perfect.

Let me offer one more. If you can put up with programming a little
Python, check out pymol/modules/pymol/menu.py and
pymol/modules/pymol/preset.py. In menu.py you could add a "No W" menu
option (or similar) to the A > Preset >

Cheers,

-- Jason

On Tue, Oct 23, 2012 at 6:02 AM, Boris Kheyfets <kheyfboris@gmail.com> wrote:
> Hello PyMOL users,
>
> Menus
> =====
>
> Is there a way I can add custom menu in PyMOL?
>
> Ideally I'd like to be able to call both
>
> * pml scripts, as well as
> * full python pymol scrpts
>
> Shortcuts
> =========
>
> Similarly -- is there a way I can bind exectution of given
>
> * pml script, or
> * full python pymol script
>
> to a given key?
>
> The problem
> ===========
>
> The basic problem
> -----------------
>
> The basic problem is to automate tasks one repeats frequenlty. For example I
> had to type::
>
>   select notW, not (resn W)
>   hide all
>   show spheres, notW
>
> frequently.
>
>
> The problem which leads to the need of menu
> -------------------------------------------
>
> So I make a pml or full-python pymol script and load it.
>
> But then I have to remember the name of the script. Which is terrible --
> because I have custom scripts in each and every program that I use.
>
>
> The problem which leads to the need of custom shortcuts
> -------------------------------------------------------
>
> Having custom menu us great as a reminder of what scripts have You written.
> But it's terrible to click through the menus. One is much better with
> shorcuts (hotkeys).
>
>
>
>
> ------------------------------------------------------------------------------
> Everyone hates slow websites. So do we.
> Make your web apps faster with AppDynamics
> Download AppDynamics Lite for free today:
> http://p.sf.net/sfu/appdyn_sfd2d_oct
> _______________________________________________
> PyMOL-users mailing list (PyMOL-users@lists.sourceforge.net)
> Info Page: https://lists.sourceforge.net/lists/listinfo/pymol-users
> Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net



--
Jason Vertrees, PhD
PyMOL Product Manager
Schrödinger, Inc.

(e) Jason.Vertrees@schrodinger.com
(o) +1 (603) 374-7120