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/

Reply via email to