Skip to main content
Email Password   helpLost your password?

Sample Image - irontextbox.jpg

Introduction

Microsoft's IronPython 1.0 (or try IronPython's main website for the latest release) is a release of the Python programming language for the .NET platform. Below are some of the most important of IronPython's 1.0 namespaces and counting:

namespace IronPython.Compiler;
namespace IronPython.Compiler.Ast;
namespace IronPython.Hosting;
namespace IronPython.Modules;
namespace IronPython.Runtime;
namespace IronPython.Runtime.Exceptions;
namespace IronPython.Runtime.Calls;
namespace IronPython.Runtime.Types;
namespace IronPython.Runtime.Operations;
namespace IronPython.CodeDom;


Please keep in mind that IronPython is written for a CLI platform. I became interested in it after learning about ConceptNet: A Practical Commonsense Reasoning Toolkit written in Python. I started a C# library class for ConceptNet and needed to trace though it. So I then found myself sidetracked by writing this IronTextBox control for myself. It may be useful to others and it may not. However, it is another small introduction into Microsoft's IronPython.

IronTextBox for IronPython 2

This article's IronTextBox is for IronPython 1.1. For the latest version please see http://www.codeproject.com/KB/miscctrl/irontextbox2.aspx

IronTextBox

The TextBox control that I developed to help me understand some unfamiliar python code is IronTextbox. I find it useful to see what IronPython's limits are since it is still in its beta stage. Plus IronPython is staged on a CLI platform and this TextBox control creates more of a non-CLI platform. It currently has three namespaces
UIIronTextBox //(the main IronTextBox and IronTextBoxControl namespace)
UIIronTextBox.Paths //(a class to store common paths for the "paths" command)
UIIronTextBox.Utils //(a misc namespace)
UIIronTextBox.IPEWrapper //(a class to handle PythonEngine stream output

Here is a screen capture of the help menu for IronTextBox 1.1.5.0b
IronTextBox Command Help Menu

The Demo


This demo uses a TextBox and UserControl based control that I named IronTextBox. It is to be used with Microsoft's IronPython. There is a bunch of useful methods in Python and IronPython 1.0 does a great job of implementing all of the common ones. Let the record state that I am not an expert at Python nor IronPython but am just learning both at the same time and it is amazing to me the work the IronPython team has done. I created this control to help me evaluate some Python scripts and learn IronPython.
IronPython 1.0 comes with several Console classes but I decided not to use them in this demo because I would have to distribute the classes within the project. Besides, what fun would that be. Also, the IronTextBox can be used as a COM object so anyone may use it to help test their applications. At least that's what I use it for.
I first started out with a TextBox based control then thought a nice color control would be outstanding. I have a very rough draft RichTextBox control still in active development. I may post the project with this article but as I am typing this I have not decided. I had to quit developing the control because I was having coloring problems with strings. I am not that up on my Rtf knowledge so due to me spinning my wheels for a couple of days I decided I was sidetracked and bailed because learning Rtf was not my main goal. So that is why the control in black and white.
I have tried to make the code easy to follow and included as many comments as I could. Therefore, I am time pressed and will not go into depth in this article. Microsoft has plenty of outstanding demos to use, although I understand that it is beta and still does not have much documentation.
Probably the most important thing to know about IronPython's PythonEngine is that it handles Python script by Executing it or Evaluating it. As long as you understand that then learning the rest of IronPython is not that difficult.


In myIronPythonDemo 1.2 try stepping thru some Python code. If you have installed ConceptNet 2.1 (please see my ConceptNet article) click on the "MontyLemmatiser commands" button and this imports MontyREChunker (if your UIIronTextBox.Paths are set correctly) and runs its python method. THIS DEMO WILL ERROR OUT. Set a breakpoint on line 92 in MontyREChunker.py. (you may need to run this first for proper results, as of this writing I am not sure why it does not like to run behind one of the other click events)


Here is a screen shot of Microsoft Visual C# Express 2005 debugging a Python module:

If you download the latest release of the
Visual Studio 2005 SDK you may run VS 2005 under it's Experimental Hive which supports IronPython integration. In this mode, it will do Python syntax coloring for you and also auto-indentation.

Below is an incomplete custom MessageBox I wrote to help me debug. It is now located in the UIIronTextBox.Utils namespace.

        /// <summary>
        /// Custom MessageBox call. Excepts some random objects 
        /// from IronPython and converts to string.
        /// </summary>
        /// Output object from IronPython.
        public void MessageBoxIronPy(Object inobject)
        {
            Type itstype = inobject.GetType();

            switch (itstype.FullName)
            {
                case "IronPython.Runtime.Tuple":
                    Tuple IPTuple = new Tuple((Tuple)inobject);
                    MessageBox.Show(IPTuple.ToString());
                    break;
                case "IronPython.Runtime.Dict":
                    Dict IPDict = new Dict();
                    IPDict = (Dict)inobject;
                    MessageBox.Show(IPDict.ToString());
                    break;
                case "IronPython.Runtime.List":
                    List IPList = new List();
                    IPList = (List)inobject;
                    MessageBox.Show(IPList.ToCodeString());
                    break;
                case "System.String":
                    MessageBox.Show(inobject.ToString());
                    break;
                case "System.Int32":
                    MessageBox.Show(Convert.ToString(inobject));
                    break;
                case "System.Collections.Specialized.StringCollection":
                    StringCollection IPSC = new StringCollection();
                    IPSC = (StringCollection)inobject;
                    StringEnumerator SCE = IPSC.GetEnumerator();
                    string output = "";
                    while (SCE.MoveNext())
                        output += SCE.Current.ToString();
                    MessageBox.Show(output);
                    break;
                default:
                    MessageBox.Show
                    (inobject.GetType().ToString() + " not yet implemented.");
                    break;
            }
        }

Try using the IronTextBox console after running the first.py demo. When it has completed type "first.hi" at the prompt and then press enter. That executes first's hi method and displays its return value in the IronTextBox.

How to Compile and Execute the Demo Application

  1. Make Sure you have downloaded and extracted IronPython 1.0 (or try IronPython's main website for the latest release). FYI: I have hardcoded the IronPython script folder to "Environment.SpecialFolder.MyDocuments + @"\Visual Studio 2005\Projects\IronPython-1.0-RC1\Tutorial"" in the project. However, I have implementated an OpenFileDialog to correct any incorrect paths.
  2. Download and unzip this article's .Net Solution and project files.
  3. From MS VC# 2005 Solution Explorer, Add a Reference by browsing to IronPython.dll and IronMath.dll located where you extracted the IronPython download.
  4. ReBuild both projects in the solution by right-clicking on each project (IronTextBox,myIronPythonDemo)and select ReBuild. The demo should now be able to execute.

 

Conclusion

IronPython is Microsoft's answer to handling Python script. It is a great resource to use. It lead me to develop this control for myself. I didn't put too much time into it, but feel free to build upon it or use it to test your own IronPython applications. I envisioned version 1.0.0.0b to include a method for browsing to a Python module and running each line through the IronTextBox but I simply ran out of time. I will be implementing this feature and I will update the article at a later date. IronTextBox 1.1.5.0b currently has "btwfi" command to walk thru a python module to see if any errors occur in IronPython.

References

Updates

3/14/06 3/16/06 3/19/06 3/26/06 6/22/06 7/16/06
7/25/06 8/10/06 5/26/08
You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
GeneralInstalling Iron Python Pin
carlos chavarriaga
8:58 13 Aug '08  
GeneralRe: Installing Iron Python Pin
JoeSox
11:00 13 Aug '08  
QuestionTab completion Pin
withak30
9:04 27 Feb '07  
AnswerRe: Tab completion Pin
JoeSox
16:11 27 Feb '07  
GeneralRe: Tab completion Pin
adamhill
21:17 3 Mar '07  
GeneralRe: Tab completion Pin
JoeSox
4:46 5 Mar '07  
QuestionPrinting in for loop Pin
zmask
8:55 22 Jan '07  
AnswerRe: Printing in for loop Pin
JoeSox
15:16 22 Jan '07  
GeneralNice Work ! Pin
Martin Gagne
3:52 9 Aug '06  
GeneralRe: Nice Work ! Pin
JoeSox
4:23 9 Aug '06  
GeneralRe: IronTextBox v1.4.1.0b posted Pin
JoeSox
16:31 10 Aug '06  
GeneralBug? Pin
slide_o_mix
12:52 25 Jul '06  
AnswerRe: Bug Fixed[modified] Pin
JoeSox
16:35 25 Jul '06  
GeneralAlternative to IronPython... Pin
Christian Birkl
9:06 20 Mar '06  
NewsYou might be interested in... Pin
leppie
22:04 14 Mar '06  
GeneralRe: You might be interested in... Pin
JoeSox
22:18 14 Mar '06  
GeneralRe: You might be interested in... Pin
leppie
4:32 15 Mar '06  


Last Updated 26 May 2008 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009