2009-11-03 7 views
1

Je suis sur windows et je développe une application pygtk. J'ai besoin de savoir quand une fenêtre est visible ou cachée par une autre fenêtre. Afin d'arrêter un processus de dessin lourd.Événement Visibility_notify dans pyGTK

http://www.pygtk.org/docs/pygtk/class-gtkwidget.html#signal-gtkwidget--visibility-notify-event

I Utilisez le visibility_notify_event pour être informé sur la visibilité des fenêtres changement d'état. Je me gtk.gdk.VISIBILITY_FULLY_OBSCURED, gtk.gdk.VISIBILITY_PARTIAL ou gtk.gdk.VISIBILITY_UNOBSCURED

http://www.pygtk.org/docs/pygtk/class-gdkevent.html

est un exemple ici à afficher un message lorsque l'événement survient.

#!/usr/bin/env python 

import pygtk 
pygtk.require('2.0') 
import gtk 

class EventBoxExample: 
    def __init__(self): 
     window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     window.set_title("Test") 
     window.connect("destroy", lambda w: gtk.main_quit()) 
     window.set_border_width(10) 

     # Create an EventBox and add it to our toplevel window 
     self.event_box = gtk.EventBox() 

     window.add(self.event_box)   
     self.event_box.show() 

     #we want all events 
     self.event_box.set_events(gtk.gdk.ALL_EVENTS_MASK) 

     #connect events 
     self.event_box.connect ("map_event", self.Map) 
     self.event_box.connect ("unmap_event", self.unMap) 
     self.event_box.connect ("configure_event", self.Configure) 
     self.event_box.connect ("expose_event", self.Expose) 
     self.event_box.connect ("visibility_notify_event", self.Visibility) 
     self.event_box.connect ("key_press_event", self.KeyPress) 
     self.event_box.connect ("button_press_event", self.ButtonPress) 
     self.event_box.connect ("button_release_event", self.ButtonRelease) 
     self.event_box.connect ("motion_notify_event", self.MouseMotion) 
     self.event_box.connect ("destroy", self.Destroy) 
     self.event_box.connect ("enter_notify_event", self.Enter) 
     self.event_box.connect ("leave_notify_event", self.Leave) 
     self.event_box.connect ("delete_event", self.Destroy) 

     window.show() 

    def Map (self, *args): 
     print "Map ", args   
     return True 

    def unMap (self, *args): 
     print "unMap ", args   
     return True 

    def Configure (self, *args): 
     print "Configure" 
     return True 

    def Expose (self, *args): 
     print "Expose" 
     return True 

    def Visibility (self, *args): 
     print "Visibility" 
     return True 

    def KeyPress (self, *args): 
     print "KeyPress" 
     return True 

    def ButtonPress (self, *args): 
     print "ButtonPress" 
     return True 

    def ButtonRelease (self, *args): 
     print "ButtonRelease" 
     return True 

    def MouseMotion (self, *args): 
     print "MouseMotion" 
     return True 

    def Enter (self, *args): 
     print "Enter" 
     self.event_box.grab_focus() 
     return True 

    def Leave (self, *args): 
     print "Leave" 
     return True 

    def Destroy (self, *args): 
     print "Destroy" 

def main(): 
    gtk.main() 
    return 0 

if __name__ == "__main__": 
    EventBoxExample() 
    main() 

Est-ce que quelqu'un a une idée de pourquoi je ne peux pas obtenir visibility_notify_event?

Thx

Répondre

2

Il est très probable que la couche sous-jacente GDK est tout simplement pas « assez bon » sous Windows. Le port de Windows vers GTK + toolkit est connu pour être un peu en retard en termes de fonctionnalité et de polissage.

Si vous pouvez essayer le même programme sur une machine Linux et que cela fonctionne, vous pouvez être certain qu'il s'agit d'une limitation du port Windows.

+0

essayé sur Linux par un ami et il a eu l'événement de visibilité. Vous avez raison, il semble ne pas être mis en œuvre sur windows port thx – rapdum