[pygtk] how event gets focus
eric texier
texiereric at yahoo.com
Sat Jun 3 08:45:23 WST 2006
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()
More information about the pygtk
mailing list