def _draw_cb(self, widget, event):
if pygame.display.get_init():
pygame.event.post(pygame.event.Event(pygame.VIDEOEXPOSE))
return True
python类event()的实例源码
def _resize_cb(self, widget, event):
evt = pygame.event.Event(pygame.VIDEORESIZE,
size=(event.width,event.height), width=event.width, height=event.height)
pygame.event.post(evt)
return False # continue processing
def _quit_cb(self, data=None):
self.__stopped = True
pygame.event.post(pygame.event.Event(pygame.QUIT))
def _keydown_cb(self, widget, event):
key = event.keyval
if key in self.__held:
return True
else:
if self.__repeat[0] is not None:
self.__held_last_time[key] = pygame.time.get_ticks()
self.__held_time_left[key] = self.__repeat[0]
self.__held.add(key)
return self._keyevent(widget, event, pygame.KEYDOWN)
def _keyevent(self, widget, event, type):
key = Gdk.keyval_name(event.keyval)
if key is None:
# No idea what this key is.
return False
keycode = None
if key in self.key_trans:
keycode = self.key_trans[key]
elif hasattr(pygame, 'K_'+key.upper()):
keycode = getattr(pygame, 'K_'+key.upper())
elif hasattr(pygame, 'K_'+key.lower()):
keycode = getattr(pygame, 'K_'+key.lower())
elif key == 'XF86Start':
# view source request, specially handled...
self._mainwindow.view_source()
else:
print 'Key %s unrecognized' % key
if keycode is not None:
if type == pygame.KEYDOWN:
mod = self._keymods()
self.__keystate[keycode] = type == pygame.KEYDOWN
if type == pygame.KEYUP:
mod = self._keymods()
ukey = unichr(Gdk.keyval_to_unicode(event.keyval))
if ukey == '\000':
ukey = ''
evt = pygame.event.Event(type, key=keycode, unicode=ukey, mod=mod)
self._post(evt)
return True
def _mousedown_cb(self, widget, event):
self.__button_state[event.button-1] = 1
return self._mouseevent(widget, event, pygame.MOUSEBUTTONDOWN)
def _mouseup_cb(self, widget, event):
self.__button_state[event.button-1] = 0
return self._mouseevent(widget, event, pygame.MOUSEBUTTONUP)
def _mouseevent(self, widget, event, type):
evt = pygame.event.Event(type, button=event.button, pos=(event.x, event.y))
self._post(evt)
return True
def main():
init()
if use_fast_events:
fastevent.init()
c = time.Clock()
win = display.set_mode((640, 480), RESIZABLE)
display.set_caption("fastevent Workout")
poster = post_them()
t1 = pytime.time()
poster.start()
going = True
while going:
# for e in event.get():
#for x in range(200):
# ee = event.Event(USEREVENT)
# r = event_module.post(ee)
# print (r)
#for e in event_module.get():
event_list = []
event_list = event_module.get()
for e in event_list:
if e.type == QUIT:
print (c.get_fps())
poster.stop.append(1)
going = False
if e.type == KEYDOWN:
if e.key == K_ESCAPE:
print (c.get_fps())
poster.stop.append(1)
going = False
if poster.done:
print (c.get_fps())
print (c)
t2 = pytime.time()
print ("total time:%s" % (t2 - t1))
print ("events/second:%s" % (NUM_EVENTS_TO_POST / (t2 - t1)))
going = False
if with_display:
display.flip()
if slow_tick:
c.tick(40)
pygame.quit()
def __init__(self, mainwindow, inner_evb):
'''Initialise the Translator with the windows to which to listen'''
self._mainwindow = mainwindow
self._inner_evb = inner_evb
# Enable events
# (add instead of set here because the main window is already realized)
self._mainwindow.add_events(
Gdk.EventMask.KEY_PRESS_MASK | \
Gdk.EventMask.KEY_RELEASE_MASK \
)
self._inner_evb.set_events(
Gdk.EventMask.POINTER_MOTION_MASK | \
Gdk.EventMask.POINTER_MOTION_HINT_MASK | \
Gdk.EventMask.BUTTON_MOTION_MASK | \
Gdk.EventMask.BUTTON_PRESS_MASK | \
Gdk.EventMask.BUTTON_RELEASE_MASK
)
self._mainwindow.set_can_focus(True)
self._inner_evb.set_can_focus(True)
# Callback functions to link the event systems
self._mainwindow.connect('unrealize', self._quit_cb)
self._inner_evb.connect('key_press_event', self._keydown_cb)
self._inner_evb.connect('key_release_event', self._keyup_cb)
self._inner_evb.connect('button_press_event', self._mousedown_cb)
self._inner_evb.connect('button_release_event', self._mouseup_cb)
self._inner_evb.connect('motion-notify-event', self._mousemove_cb)
self._inner_evb.connect('draw', self._draw_cb)
self._inner_evb.connect('configure-event', self._resize_cb)
# Internal data
self.__stopped = False
self.__keystate = [0] * 323
self.__button_state = [0,0,0]
self.__mouse_pos = (0,0)
self.__repeat = (None, None)
self.__held = set()
self.__held_time_left = {}
self.__held_last_time = {}
self.__tick_id = None
def __init__(self, mainwindow, inner_evb):
'''Initialise the Translator with the windows to which to listen'''
self._mainwindow = mainwindow
self._inner_evb = inner_evb
# Enable events
# (add instead of set here because the main window is already realized)
self._mainwindow.add_events(
Gdk.EventMask.KEY_PRESS_MASK | \
Gdk.EventMask.KEY_RELEASE_MASK \
)
self._inner_evb.set_events(
Gdk.EventMask.POINTER_MOTION_MASK | \
Gdk.EventMask.POINTER_MOTION_HINT_MASK | \
Gdk.EventMask.BUTTON_MOTION_MASK | \
Gdk.EventMask.BUTTON_PRESS_MASK | \
Gdk.EventMask.BUTTON_RELEASE_MASK
)
self._mainwindow.set_can_focus(True)
self._inner_evb.set_can_focus(True)
# Callback functions to link the event systems
self._mainwindow.connect('unrealize', self._quit_cb)
self._inner_evb.connect('key_press_event', self._keydown_cb)
self._inner_evb.connect('key_release_event', self._keyup_cb)
self._inner_evb.connect('button_press_event', self._mousedown_cb)
self._inner_evb.connect('button_release_event', self._mouseup_cb)
self._inner_evb.connect('motion-notify-event', self._mousemove_cb)
self._inner_evb.connect('draw', self._draw_cb)
self._inner_evb.connect('configure-event', self._resize_cb)
# Internal data
self.__stopped = False
self.__keystate = [0] * 323
self.__button_state = [0,0,0]
self.__mouse_pos = (0,0)
self.__repeat = (None, None)
self.__held = set()
self.__held_time_left = {}
self.__held_last_time = {}
self.__tick_id = None
def main():
init()
if use_fast_events:
fastevent.init()
c = time.Clock()
win = display.set_mode((640, 480), RESIZABLE)
display.set_caption("fastevent Workout")
poster = post_them()
t1 = pytime.time()
poster.start()
going = True
while going:
# for e in event.get():
#for x in range(200):
# ee = event.Event(USEREVENT)
# r = event_module.post(ee)
# print (r)
#for e in event_module.get():
event_list = []
event_list = event_module.get()
for e in event_list:
if e.type == QUIT:
print (c.get_fps())
poster.stop.append(1)
going = False
if e.type == KEYDOWN:
if e.key == K_ESCAPE:
print (c.get_fps())
poster.stop.append(1)
going = False
if poster.done:
print (c.get_fps())
print (c)
t2 = pytime.time()
print ("total time:%s" % (t2 - t1))
print ("events/second:%s" % (NUM_EVENTS_TO_POST / (t2 - t1)))
going = False
if with_display:
display.flip()
if slow_tick:
c.tick(40)
pygame.quit()
def __init__(self, mainwindow, inner_evb):
'''Initialise the Translator with the windows to which to listen'''
self._mainwindow = mainwindow
self._inner_evb = inner_evb
# Enable events
# (add instead of set here because the main window is already realized)
self._mainwindow.add_events(
Gdk.EventMask.KEY_PRESS_MASK | \
Gdk.EventMask.KEY_RELEASE_MASK \
)
self._inner_evb.set_events(
Gdk.EventMask.POINTER_MOTION_MASK | \
Gdk.EventMask.POINTER_MOTION_HINT_MASK | \
Gdk.EventMask.BUTTON_MOTION_MASK | \
Gdk.EventMask.BUTTON_PRESS_MASK | \
Gdk.EventMask.BUTTON_RELEASE_MASK
)
self._mainwindow.set_can_focus(True)
self._inner_evb.set_can_focus(True)
# Callback functions to link the event systems
self._mainwindow.connect('unrealize', self._quit_cb)
self._inner_evb.connect('key_press_event', self._keydown_cb)
self._inner_evb.connect('key_release_event', self._keyup_cb)
self._inner_evb.connect('button_press_event', self._mousedown_cb)
self._inner_evb.connect('button_release_event', self._mouseup_cb)
self._inner_evb.connect('motion-notify-event', self._mousemove_cb)
self._inner_evb.connect('draw', self._draw_cb)
self._inner_evb.connect('configure-event', self._resize_cb)
# Internal data
self.__stopped = False
self.__keystate = [0] * 323
self.__button_state = [0,0,0]
self.__mouse_pos = (0,0)
self.__repeat = (None, None)
self.__held = set()
self.__held_time_left = {}
self.__held_last_time = {}
self.__tick_id = None
def process_event(self, event):
# perf: local for faster access
io = self.io
if event.type == pygame.MOUSEMOTION:
io.mouse_pos = event.pos
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
io.mouse_down[0] = 1
if event.button == 2:
io.mouse_down[1] = 1
if event.button == 3:
io.mouse_down[2] = 1
if event.type == pygame.MOUSEBUTTONUP:
if event.button == 1:
io.mouse_down[0] = 0
if event.button == 2:
io.mouse_down[1] = 0
if event.button == 3:
io.mouse_down[2] = 0
if event.button == 4:
io.mouse_wheel = .5
if event.button == 5:
io.mouse_wheel = -.5
if event.type == pygame.KEYDOWN:
for char in event.unicode:
code = ord(char)
if 0 < code < 0x10000:
io.add_input_character(code)
io.keys_down[event.key] = True
if event.type == pygame.KEYUP:
io.keys_down[event.key] = False
if event.type in (pygame.KEYDOWN, pygame.KEYUP):
io.key_ctrl = (
io.keys_down[pygame.K_LCTRL] or
io.keys_down[pygame.K_RCTRL]
)
io.key_alt = (
io.keys_down[pygame.K_LALT] or
io.keys_down[pygame.K_RALT]
)
io.key_shift = (
io.keys_down[pygame.K_LSHIFT] or
io.keys_down[pygame.K_RSHIFT]
)
io.key_super = (
io.keys_down[pygame.K_LSUPER] or
io.keys_down[pygame.K_LSUPER]
)
if event.type == pygame.VIDEORESIZE:
io.display_size = event.size