def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if event.type == pygame.MOUSEBUTTONUP:
for each in self.board.units:
if each.is_door is True:
self.board.all_sprites_list.move_to_front(each)
self.check_result()
if event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN:
self.auto_check_reset()
elif event.type == pygame.KEYUP:
self.check_result()
python类KEYUP的实例源码
def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if self.ship_id < 0 and event.type == pygame.MOUSEBUTTONDOWN:
# make it impossible to deselect the main character
self.board.active_ship = 0
self.ship_id = 0
if self.moveable == True:
pos = event.pos
column = (pos[0] - self.layout.menu_w) // (self.layout.width)
row = (pos[1] - self.layout.top_margin) // (self.layout.height)
self.direction = [0, 0]
arrow_clicked = False
if column == self.owl_pos[0] - 1 and row == self.owl_pos[1]:
self.direction[0] = -1
arrow_clicked = True
elif column == self.owl_pos[0] + 1 and row == self.owl_pos[1]:
self.direction[0] = 1
arrow_clicked = True
elif column == self.owl_pos[0] and row == self.owl_pos[1] - 1:
self.direction[1] = -1
arrow_clicked = True
elif column == self.owl_pos[0] and row == self.owl_pos[1] + 1:
self.direction[1] = 1
arrow_clicked = True
if arrow_clicked:
self.check_direction_kdown()
if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and self.moveable == False:
self.move = False
elif event.type == pygame.KEYUP or event.type == pygame.MOUSEBUTTONUP:
self.highlight_color(-1)
self.mainloop.redraw_needed[0] = True
self.move = False
def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if event.type == pygame.MOUSEBUTTONUP:
for each in self.board.units:
if each.is_door is True:
self.board.all_sprites_list.move_to_front(each)
self.check_result()
if event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN:
self.auto_check_reset()
elif event.type == pygame.KEYUP:
self.check_result()
def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if event.type == pygame.MOUSEBUTTONUP:
for each in self.board.units:
if each.is_door is True:
self.board.all_sprites_list.move_to_front(each)
if event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN:
self.auto_check_reset()
elif event.type == pygame.KEYUP or event.type == pygame.MOUSEBUTTONUP:
self.check_result()
def putEvent(self, event):
# keys down
if event.type == pygame.KEYDOWN \
and event.key in self.keyToAction:
self.gameInterface.activateGameAction(self.keyToAction[event.key])
# keys up
elif event.type == pygame.KEYUP \
and event.key in self.keyToAction:
self.gameInterface.deactivateGameAction(self.keyToAction[event.key])
def user_event_action(self, event):
""" User event handler
:param event: the event to handle
"""
if event.sub_type == SUB_TYPE_KEYBOARD and self.state.keyboard_key == event.keyboard_key:
if event.action == pygame.KEYDOWN:
self.press_action()
elif event.action == pygame.KEYUP:
self.release_action()
def user_event_action(self, event):
""" User event dispatcher
:param event: the event to handle
"""
key = getattr(self.state, "keyboard_key", None)
if event.sub_type == SUB_TYPE_KEYBOARD and key and key == event.keyboard_key:
if event.action == pygame.KEYDOWN:
self.press_action()
elif event.action == pygame.KEYUP:
self.release_action()
def keyboard_action(self, event):
""" Keyboard event handler
:param event: the event to handle
"""
if event.action == pygame.KEYDOWN:
self.press_action()
elif event.action == pygame.KEYUP:
self.release_action(self.state)
def keyboard_action(self, event):
""" Keyboard event handler
:param event: event to handle
"""
if event.keyboard_key == self.key_knob:
self.knob_event(event)
return
if event.action == pygame.KEYUP:
self.current_img = self.img_knob
self.current_filename = self.knob_filename
self.clicked = False
self.update_position()
self.update_knob_image()
self.notify_slide_listeners()
return
elif event.action == pygame.KEYDOWN:
self.press_action()
if event.keyboard_key == self.key_incr:
self.last_knob_position += self.step
elif event.keyboard_key == self.key_decr:
self.last_knob_position -= self.step
if self.img_selected:
self.current_img = self.img_selected
else:
self.current_img = self.img_knob_on
def handle_event(self, event):
""" Screensaver screen event handler
:param event: event to handle
"""
if not self.visible: return
if event.type == USER_EVENT_TYPE and event.sub_type == SUB_TYPE_KEYBOARD and event.action == pygame.KEYUP:
if event.keyboard_key == kbd_keys[KEY_UP] or event.keyboard_key == kbd_keys[KEY_DOWN]:
if self.top_menu_enabled:
index = self.saver_menu.get_selected_index()
self.top_menu_enabled = False
self.delay_menu.unselect()
s = len(self.delay_menu.delays)
if index > (s - 1):
index = s - 1
self.delay_menu.select_by_index(index)
else:
index = self.delay_menu.get_selected_index()
self.top_menu_enabled = True
self.saver_menu.unselect()
s = len(self.delay_menu.delays)
if index == (s - 1):
index = len(self.saver_menu.savers) - 1
self.saver_menu.select_by_index(index)
elif event.keyboard_key == kbd_keys[KEY_HOME]:
self.home_button.handle_event(event)
elif event.keyboard_key == kbd_keys[KEY_PLAY_PAUSE]:
self.player_button.handle_event(event)
else:
if self.top_menu_enabled:
self.saver_menu.handle_event(event)
else:
self.delay_menu.handle_event(event)
else:
Container.handle_event(self, event)
def handle_event(self, event):
""" About Screen event handler
:param evenr: event to hanle
"""
if not self.visible: return
mouse_events = [pygame.MOUSEBUTTONUP, pygame.MOUSEBUTTONDOWN]
if (event.type in mouse_events) or (event.type == USER_EVENT_TYPE and event.sub_type == SUB_TYPE_KEYBOARD and event.action == pygame.KEYUP):
self.notify_listeners(None)
def handle_event(self, event):
""" File menu event handler
:param event: event to handle
"""
if not self.visible: return
if event.type == USER_EVENT_TYPE and event.sub_type == SUB_TYPE_KEYBOARD and event.action == pygame.KEYUP:
if event.keyboard_key == kbd_keys[KEY_LEFT]:
if (self.filelist.current_item_index_in_page == 0 and self.filelist.current_item_index != 0) or self.filelist.current_item_index == 0:
if self.filelist.length <= self.filelist.items_per_page:
self.select_item_on_page(self.filelist.length - 1)
else:
self.turn_page_left()
else:
self.select_item_on_page(self.filelist.current_item_index - 1)
elif event.keyboard_key == kbd_keys[KEY_RIGHT]:
if self.filelist.current_item_index == self.filelist.length - 1 or self.filelist.current_item_index_in_page == self.filelist.items_per_page - 1:
if self.filelist.length <= self.filelist.items_per_page:
self.select_item_on_page(0)
else:
self.turn_page_right()
else:
self.select_item_on_page(self.filelist.current_item_index + 1)
elif event.keyboard_key == kbd_keys[KEY_UP] or event.keyboard_key == kbd_keys[KEY_DOWN]:
Menu.handle_event(self, event)
self.filelist.set_current_item(self.selected_index)
self.notify_menu_navigation_listeners(self.empty_state)
elif event.keyboard_key == kbd_keys[KEY_SELECT]:
Menu.handle_event(self, event)
else:
Menu.handle_event(self, event)
def handle_lirc_event(self, code):
""" LIRC event handler.
To simplify event handling it wraps IR events into user event with keyboard sub-type.
For one IR event it generates two events - one for key down and one for key up.
:param code: IR code
"""
if self.screensaver_dispatcher.saver_running:
self.screensaver_dispatcher.cancel_screensaver()
return
d = {}
d[KEY_SUB_TYPE] = SUB_TYPE_KEYBOARD
d[KEY_ACTION] = pygame.KEYDOWN
d[KEY_KEYBOARD_KEY] = None
try:
d[KEY_KEYBOARD_KEY] = lirc_keyboard_map[code[0]]
station_screen = isinstance(self.current_screen, StationScreen)
file_player_screen = isinstance(self.current_screen, FilePlayerScreen)
if file_player_screen or (station_screen and self.current_screen.station_menu.current_mode == StationMenu.STATION_MODE):
if code[0] == "up":
d[KEY_KEYBOARD_KEY] = kbd_keys[KEY_VOLUME_UP]
elif code[0] == "down":
d[KEY_KEYBOARD_KEY] = kbd_keys[KEY_VOLUME_DOWN]
logging.debug("Received IR key: %s", d[KEY_KEYBOARD_KEY])
except KeyError:
logging.debug("Received not supported key: %s", code[0])
pass
if d[KEY_KEYBOARD_KEY]:
event = pygame.event.Event(USER_EVENT_TYPE, **d)
pygame.event.post(event)
d[KEY_ACTION] = pygame.KEYUP
event = pygame.event.Event(USER_EVENT_TYPE, **d)
pygame.event.post(event)
def dispatch(self, player, shutdown):
""" Dispatch events.
Runs the main event loop. Redirects events to corresponding handler.
Distinguishes four types of events:
- Quit event - when user closes window (Windows only)
- Keyboard events
- Mouse events
- User Events
:param player: reference to player object
"param shutdown: shutdown method to use when user exits
"""
self.player = player
self.shutdown = shutdown
mouse_events = [pygame.MOUSEBUTTONDOWN, pygame.MOUSEBUTTONUP, pygame.MOUSEMOTION]
pygame.event.clear()
clock = Clock()
while self.run_dispatcher:
for event in pygame.event.get():
s = str(event)
logging.debug("Received event: %s", s)
if event.type == pygame.QUIT:
self.shutdown(event)
elif (event.type == pygame.KEYDOWN or event.type == pygame.KEYUP) and not self.config[USAGE][USE_LIRC]:
self.handle_keyboard_event(event)
elif event.type in mouse_events or event.type == USER_EVENT_TYPE:
self.handle_event(event)
if self.lirc != None:
code = self.lirc.nextcode()
if code != None:
self.handle_lirc_event(code)
self.current_screen.refresh()
self.screensaver_dispatcher.refresh()
clock.tick(self.frame_rate)
def updateKeys(self, event):
if event.type == pygame.KEYDOWN:
if event.key == K_r:
keys["r"] = True
elif event.key == pygame.K_e:
keys["e"] = True
elif event.key == pygame.K_p:
keys["p"] = True
elif event.key == pygame.K_n:
keys["n"] = True
if event.type == pygame.KEYUP:
if event.key == pygame.K_r:
keys["r"] = False
elif event.key == pygame.K_e:
keys["e"] = False
elif event.key == pygame.K_p:
keys["p"] = False
elif event.key == pygame.K_n:
keys["n"] = False
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1: # Left Mouse
keys["mouseL"] = True
if event.button == 3: # Right Mouse
keys["mouseR"] = True
if event.type == pygame.MOUSEBUTTONUP:
if event.button == 1: # Left Mouse
keys["mouseL"] = False
if event.button == 3: # Right Mouse
keys["mouseR"] = False
keys["mousePos"] = pygame.mouse.get_pos()
def main(self):
self.keys_down = []
print "Opening port"
self.ser = serial.Serial(guess_port(), timeout=2)
print "Forwarding key input through to the connected MCU"
pygame.init()
pygame.display.set_mode((100, 100))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
return
elif event.type == pygame.KEYDOWN:
v = scancodes_to_beebcodes.get(event.key, None)
if v is not None:
print "beebcode %02x" % v
if v not in self.keys_down:
self.keys_down.append(v)
self.send_keys()
print("KEYDOWN %s %s" % (
event.key,
'' if (event.key < 32 or event.key > 127) else '(%s)' % chr(event.key)))
elif event.type == pygame.KEYUP:
print("KEYUP %s" % event.key)
v = scancodes_to_beebcodes.get(event.key, None)
if v is not None:
print "beebcode %02x" % v
if v in self.keys_down:
while v in self.keys_down:
self.keys_down.remove(v)
self.send_keys()
def see_thru_pause(self):
self.running = True
while self.running:
for e in pygame.event.get():
if e.type == pygame.KEYUP:
self.running = False
#pygame.display.flip()
def black_out_pause(self,game):
while self.running:
game.screen.fill(black)
for e in pygame.event.get():
if e.type == pygame.KEYUP:
self.running = False
pygame.display.flip()
def _keyup_cb(self, widget, event):
key = event.keyval
if self.__repeat[0] is not None:
if key in self.__held:
# This is possibly false if set_repeat() is called with a key held
del self.__held_time_left[key]
del self.__held_last_time[key]
self.__held.discard(key)
return self._keyevent(widget, event, pygame.KEYUP)
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