I ask a similar question couple weeks ago, but I am still missing
something.

The eventbox  is suppose to toggle the visibility of its menubar.
The raison I am not using the add_accelerator way, its because 
when the menubar is invisible, its stop receiving press_key signal

How do I get the following code to get the eventbox that the cursor
is in, to receive the '@'.

  



#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk, gobject
from gtk.gdk import CONTROL_MASK, SHIFT_MASK

class omGtkPanel(gtk.EventBox):
        def toggleVisibility(self):
                vis = self._menubar.get_property("visible")
                print "in toggle",vis,self
                
                if vis:
                        self._menubar.hide()
                else:
                        self._menubar.show()

        def visibleMenuBar(self, panel,event):
                if (event.get_state() == gtk.gdk.SHIFT_MASK):
                        print self,gtk.gdk.keyval_name(event.keyval)
                        if gtk.gdk.keyval_name(event.keyval) == "at":
                                self.toggleVisibility()
                        return True
                return False
        
        def entryCb(self,wid):
                self._entry.set_editable(False)
                
                
        def selectEntryFocus(self,wid,foo):
                self._entry.set_editable(True)
                
        def show(self):
                self.realize()
                gtk.EventBox.show(self)
        
        
        def __init__(self,window):
                gtk.EventBox.__init__(self)
                vbox = gtk.VBox()
                self._vbox = vbox
                vbox.show()
                
                self._menubar = menubar = gtk.MenuBar()
                menubar.show()
                vbox.pack_start(menubar,False)
                
                panelMenu = gtk.MenuItem("Panel")
                panelMenu.show()
                
                menuTop = gtk.Menu()    
                
                optionMenu = gtk.MenuItem("Layout")
                optionMenu.show()
                
                submenuOption = gtk.Menu()      
                visMenuBar = gtk.CheckMenuItem("hide menu    shift @")
                visMenuBar.connect("activate",self.toggleVisibility)
                                                                        
                visMenuBar.show()
                submenuOption.append(visMenuBar)
                submenuOption.show()    
                
                optionMenu.set_submenu(submenuOption)
                
                menuTop.append(optionMenu)
                
                panelMenu.set_submenu(menuTop)
                menubar.append(panelMenu)
                
                frame = gtk.Frame("foo")
                
                frame.show()
                frame.set_size_request(110, 20)
                vbox.pack_start(frame,True)
                
                
                self._entry = entry = gtk.Entry()
                entry.set_text("")
                entry.set_activates_default(True)
                entry.connect("activate",self.entryCb)
                frame.add(entry)
                entry.set_editable(False)
                entry.add_events(gtk.gdk.BUTTON_PRESS_MASK)
                entry.connect("button_press_event",self.selectEntryFocus)
                entry.show()

                
                self.set_flags(gtk.CAN_DEFAULT & gtk.CAN_FOCUS)
                self.add_events(gtk.gdk.KEY_PRESS_MASK)
                self.connect("key_press_event",self.visibleMenuBar)     

                self.add(vbox)
                
############################
class omGtkWindow(gtk.Window):
        def __init__(self,title):
                gtk.Window.__init__(self)
                self.set_title(title)
                self.connect("destroy", lambda w: gtk.main_quit())
                self._accel_group = gtk.AccelGroup()
                self.add_accel_group(self._accel_group)

############################
def main():
        gtk.main()
        return 0
############################
if __name__ == "__main__":
        window = omGtkWindow("testWindow")
        vbox = gtk.VBox()
        vbox.show()
        window.add(vbox)
        
        panel = omGtkPanel(window)
        vbox.pack_start(panel,True)
        panel.show()    
        
        panel = omGtkPanel(window)
        vbox.pack_start(panel,True)
        panel.show()
        
        window.show()
        main()


_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to