[pygtk] getting the right focus
eric texier
texiereric at yahoo.com
Thu May 25 13:01:52 WST 2006
Sorry if the example is too long, it's not working the way I would
like.
I would like to toggle visibility of the local menubar with a key
stroke('@'). but only until I enter 'return' in one of the entry, the
correct menubar(through its evenBox) is getting the focus
There is 2 things that are happening that I don't understand:
- I only set a enter_notify_event callback, but button_press is
activing it too.
- why after grab_focus, I am not getting the eventBox focus. Only
after activating the entry, I am getting the key press.
'@' (toggle the visibility of the local menubar)
Hope it's clear enough. I am also pretty newby at pygtk so if there
is better way to do that I will like to hear about it. For example,
it is possible to have accelerator on something else than a window?
Thanks,
Eric
#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk, gobject
class omGtkPanel(gtk.EventBox):
def toggleVisibility(self,fs):
vis = self._menubar.get_property("visible")
if vis:
self._menubar.hide()
else:
self._menubar.show()
def selectFocus(self,panel,event):
print "FFFFFFOCUS",panel
self.grab_focus()
return False
def visibleMenuBar(self, panel,event):
if (event.get_state() == gtk.gdk.SHIFT_MASK):
print "in keyPress with shift"
if gtk.gdk.keyval_name(event.keyval) == "at":
self.toggleVisibility(0)
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 |
gtk.gdk.ENTER_NOTIFY_MASK)
self.connect("key_press_event",self.visibleMenuBar)
#self.connect("button_press_event",self.selectFocus)
self.connect("enter_notify_event",self.selectFocus)
self.set_above_child(False)
self.set_visible_window(False)
self.add(vbox)
############################
class omGtkWindow(gtk.Window):
def __init__(self,title):
gtk.Window.__init__(self)
self.set_title(title)
self.set_default_size(200,200)
self.connect("destroy", lambda w: gtk.main_quit())
############################
def main():
gtk.main()
return 0
############################
if __name__ == "__main__":
window = omGtkWindow("testWindow")
# create a vpaned widget and add it to our toplevel window
vpaned = gtk.VPaned()
window.add(vpaned)
vpaned.show()
panel = omGtkPanel(window)
vpaned.add1(panel)
panel.show()
panel = omGtkPanel(window)
vpaned.add2(panel)
panel.show()
vpaned.set_position(100)
window.show()
main()
Eric Texier
6, Rue Jean Baptiste Potin
92170 Vanves
Tel: 01 46 42 90 60
Mobile Reb: 06 81 06 44 74
Mobile Eric: 06 86 79 12 13
More information about the pygtk
mailing list