On 23/03/2010 17:01, Alex Hall wrote:
Hi all, but mainly Tim Golden:
Tim, I am using your wonderful message loop for keyboard input, the
one on your site that you pointed me to a few months ago. It has been
working perfectly as long as I had only one dictionary of keys mapping
to one dictionary of functions, but now I want two of each. My program
has different modes, which may have varying keystrokes, and I also
have some global keystrokes which are the same across all modes, like
exiting or switching modes. I cannot figure out how to make the
message loop look in two dictionaries at onc. I tried using an if,
saying that if action_to_take was not set in the mode-specific
dictionary then look at the global dictionary, but it is like it is
never looking in the global dictionary at all. I get no syntax errors
or problems when running the program, so it has to be something in my
logic.

There's definitely some confusion, as MRAB picked up, with the
globalkeys / globalfuncs thing. I can see no problem with simply
defining an additional pair of dictionaries parallel with each of
the keys/funcs dictionaries (note that the numbers are different
from those of othe other dictionaries as these are the registration
ids of the hotkeys):

global_keys = {
  100: (68, win32com.MOD_ALT | win32con.MOD_CONTROL ...),
  ...
}

global_funcs = {
  100 : dict.ShowLookupDialog,
  ...
}

Then your central action code could be something like:

  action_to_take = global_funcs.get (msg.wParam) or HOTKEY_ACTIONS.get 
(msg.wParam)
  if action_to_take:
    action_to_take ()

This assumes that the funcs dictionaries will only ever contain a
valid function, so the only possible Falsish value will arise from
the get returning None.

TJG

BTW, you're shadowing a couple of builtins: global & dict which
might give you problems later if you needed them. There are other
issues with the structure of your code but nothing a little
refactoring couldn't sort out if you felt so inclined.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to