[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