Hi,
I'm experimenting with a scrolledwindow that includes a viewport on a drawingarea. I
would like to know when the mouse enters or leaves the viewport. I tried detecting
this by using "on_viewport1_event" and listing the event and widget with a callback.
I never pick up an ENTER_NOTFY or LEAVE_NOTIFY event for the viewport widget. If I
try the same mechanism for the top window which contains the scrolledwindow which
contains the viewport (whew!...) I pick up the ENTER_NOTIFY.
I included the python code below (for the viewport event detection, the
"on_viewport1_event" is defined for viewport1 in the glade file).
#!/usr/bin/env python
import sys
try:
import pygtk
# tell pyGTK, if possible, that we want GTKv2
pygtk.require("2.0")
except:
# Some distributions come with GTK2, but not pyGTK
pass
try:
import gtk
import gtk.glade
except:
print "You need to install pyGTK or GTKv2",
print "or set your PYTHONPATH correctly."
print "try: export PYTHONPATH=",
print "/usr/local/lib/python2.2/site-packages"
sys.exit(1)
events={gtk.gdk.DELETE:"DELETE",
gtk.gdk.DESTROY:"DESTROY",
gtk.gdk.EXPOSE:"EXPOSE",
gtk.gdk.NO_EXPOSE:"NO_EXPOSE",
gtk.gdk.VISIBILITY_NOTIFY:"VISIBILITY_NOTIFY",
gtk.gdk.MOTION_NOTIFY:"MOTION_NOTIFY",
gtk.gdk.BUTTON_PRESS:"BUTTON_PRESS",
gtk.gdk.BUTTON_RELEASE:"BUTTON_RELEASE",
gtk.gdk.KEY_PRESS:"KEY_PRESS",
gtk.gdk.KEY_RELEASE:"KEY_RELEASE",
gtk.gdk.ENTER_NOTIFY:"ENTER_NOTIFY",
gtk.gdk.LEAVE_NOTIFY:"LEAVE_NOTIFY",
gtk.gdk.FOCUS_CHANGE:"FOCUS_CHANGE",
gtk.gdk.MAP:"MAP",
gtk.gdk.UNMAP:"UNMAP"}
gladefile="sls_browser3.glade"
windowname="window1"
wTree=gtk.glade.XML(gladefile,windowname)
## Identify individual widgets
topwindow=wTree.get_widget("window1")
quitmenu=wTree.get_widget("quit1")
openmenu=wTree.get_widget("open1")
drawingarea=wTree.get_widget("drawingarea1")
## Assign accelerators
accel_group1=gtk.AccelGroup()
topwindow.add_accel_group(accel_group1)
quitmenu.add_accelerator("activate",accel_group1,ord('Q'),
gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
openmenu.add_accelerator("activate",accel_group1,ord('O'),
gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
def CloseTheApp(*args):
gtk.mainquit()
def FileDlgOK(widget,fdlg):
#print "FileDlgOK args = ", args
#SelectedFile = "bogus"
SelectedFile = fdlg.get_filename()
print "File chosen : %s" % (SelectedFile)
fdlg.destroy()
def FileDlgCancel(widget,fdlg):
print "No file selected - cancel hit"
fdlg.destroy()
def ButtonClicked(*args):
filedlg = gtk.FileSelection(title="Select Data File")
filedlg.set_position(gtk.WIN_POS_CENTER)
filedlg.ok_button.connect("clicked", FileDlgOK,filedlg)
filedlg.cancel_button.connect("clicked",FileDlgCancel,filedlg)
#filedlg.complete("*.c")
filedlg.set_modal(gtk.TRUE)
filedlg.show()
def event_name(event):
events={gtk.gdk.DELETE:"DELETE",
gtk.gdk.DESTROY:"DESTROY",
gtk.gdk.EXPOSE:"EXPOSE",
gtk.gdk.NO_EXPOSE:"NO_EXPOSE",
gtk.gdk.VISIBILITY_NOTIFY:"VISIBILITY_NOTIFY",
gtk.gdk.MOTION_NOTIFY:"MOTION_NOTIFY",
gtk.gdk.BUTTON_PRESS:"BUTTON_PRESS",
gtk.gdk.BUTTON_RELEASE:"BUTTON_RELEASE",
gtk.gdk.KEY_PRESS:"KEY_PRESS",
gtk.gdk.KEY_RELEASE:"KEY_RELEASE",
gtk.gdk.ENTER_NOTIFY:"ENTER_NOTIFY",
gtk.gdk.LEAVE_NOTIFY:"LEAVE_NOTIFY",
gtk.gdk.FOCUS_CHANGE:"FOCUS_CHANGE",
gtk.gdk.MAP:"MAP",
gtk.gdk.UNMAP:"UNMAP"}
if event in events.keys():
return events[event]
else:
return "UNKNOWN"
def event_mgr(widget,event):
print "widget: ", widget,"\n event: ", event_name(event.type), \
"->",event.type
#self.event_name(event.type)
#print widget.name
if ((event.type==gtk.gdk.BUTTON_PRESS)and
(widget.name=="scrolledwindow1")):
print "BUTTON_PRESS in widget ", widget.name, "button# ", event.button
#print "setting cursor"
#widget.get_parent_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.FLEUR))
print "x = ", event.x, ",y = ", event.y
H = widget.get_hadjustment()
h = H.get_value()
V = widget.get_vadjustment()
v = V.get_value()
print "h = ", h, ", v = ", v
wTree_dic = {"on_window1_destroy":gtk.mainquit,
"on_quit1_activate":gtk.mainquit,
"on_viewport1_event":event_mgr,
"on_open1_activate":ButtonClicked,
"on_scrolledwindow1_event":event_mgr}
wTree.signal_autoconnect(wTree_dic)
gtk.mainloop()
--
Luc Lefebvre
In the beginner's mind there are many possibilities,
in the expert's mind there are few. <Shunryu Suzuki>
Key fingerprint = D2E5 5E35 B910 6F4E 0242 EC63 0FD9 96D0 C7F4 784E
_______________________________________________
pygtk mailing list [EMAIL PROTECTED]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/