context = {}

def inputBox_KeyDown(s, e):
   root.message.Text = ''
   key = e.Key.value__
   result = root.inputBox.Text
   if key == 3: #If 'Enter' key is pressed
        try:
         try:
           root.message.Text = eval(result)
         except SyntaxError:
           exec result in context
      except Exception, e:
        print 'Unhandled exception', e

Note the "exec result in context" and my suggested changes to your exception handling.

Michael


xkrja wrote:
Thanks for the reply.

Below is a snippet of what I've got:

def inputBox_KeyDown(s, e):
    root.message.Text = ''
    key = e.Key.value__
    result = root.inputBox.Text
    if key == 3: #If 'Enter' key is pressed
        try:
          root.message.Text = eval(result)
        except:
          exec result
root = Application.Current.LoadRootVisual(UserControl(), "app.xaml")
sys.stdout = Writer(root.message)

root.inputBox.KeyDown += inputBox_KeyDown

Can't I just put everthing that is evaluated or executed in some kind of
global scope so that they can be accessed just like in the console? If not:
I looked a little at dictionaries but didn't really understand how to use
them in this case? Can someone give me a short example that can be used for
my case?

Once again, thanks for all help!


Michael Foord-5 wrote:
You've snipped the code so I can't see it exactly, but I'm pretty sure you are doing this inside a method. This will create a new 'scope' every time you enter the method and so you are creating a local variable that disappears when you exit the method.

When you exec you can provide a dictionary as a context for the execution to happen in. If you store this as an instance member and re-use the same execution context every time then changes will be 'remembered'.

Michael




--
http://www.ironpythoninaction.com/

_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to