<p>您可以计划在双击持续时间之后发生单击事件,然后如果发生双击,请在运行处理程序之前删除计划的单击事件。例如:</p>
<pre><code>import pygtk
pygtk.require('2.0')
import gtk
import glib
class Test:
def __init__(self):
# Create a new window
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("Test")
# It's a good idea to do this for all windows.
self.window.connect("destroy", lambda wid: gtk.main_quit())
self.window.connect("delete_event", lambda a1,a2:gtk.main_quit())
# Sets the border width of the window.
self.window.set_border_width(20)
# Create a new button
button = gtk.Button("Click")
self.click_events = []
# Connect the "clicked" signal of the button to our callback
button.connect("button-press-event", self.on_button_press_event)
button.show()
self.window.add(button)
self.window.show()
def on_button_press_event(self, widget, event):
if event.button == 1:
if event.type == gtk.gdk._2BUTTON_PRESS:
# Remove all single click events
while self.click_events:
glib.source_remove(self.click_events.pop())
glib.idle_add(self.handle_double_click,widget,event)
elif event.type == gtk.gdk.BUTTON_PRESS:
# Schedule after double click can occur
self.click_events.append(glib.timeout_add(300,self.handle_single_click,widget,event))
def handle_single_click(self,widget,event):
# TODO: Handle single click
print "TODO: Handle single click"
def handle_double_click(self,widget,event):
# TODO: Handle double click
print "TODO: Handle double click"
def main():
Test()
gtk.main()
return 0
if __name__ == "__main__":
main()
</code></pre>