Nisse
Nisse

Reputation: 43

How to create an input box with iron python using windows.forms?

For a simple Gui in Iron python I need a simple dialog box with an input text field and OK and cancel button and return value of input text, equivalent to Visual Basic input box. So basically, dialog pops up, you enter value, hit OK an dialog box closes and returns value to calling function.

I could not find anything in the windows forms library. I guess you need to create a form yourself from scratch, using text box, etc..?

Is there really no input box in winforms? If so, could anyone share how to create one with winforms and iron python?

Thanks for help! Nils

Upvotes: 1

Views: 2089

Answers (1)

Nisse
Nisse

Reputation: 43

I am new to Ironpython and GUI programming, therefore the following solution might not be elegant neither complete, but it seems to work. Any ideas for improvement?

import clr

clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

from System.Drawing import Point
from System.Windows.Forms import  Button, Form, Label, TextBox, FormStartPosition, FormBorderStyle

class MyInputBoxClass(Form):

    def __init__(self,message, title, defaultText):
        #Creates Input Box with text Input Field
     
        #define form
        self.Text = title        
        self.Width = 600
        self.Height = 110
        self.StartPosition = FormStartPosition.CenterScreen;
        self.FormBorderStyle = FormBorderStyle.FixedDialog
        self.MinimizeBox = False;
        self.MaximizeBox = False;

        #define label
        self.label = Label()
        self.label.Text = message
        self.label.Location = Point(10, 10)
        self.label.Height = 30
        self.label.Width = 250

        #define text box
        self.textbox = TextBox()
        self.textbox.Text = defaultText        
        self.textbox.Location = Point(10, 40)
        self.textbox.Width = 500

        #define button
        self.button1 = Button()
        self.button1.Text = 'ok'
        self.button1.Location = Point(510, 40)
        self.AcceptButton = self.button1        

        #define dialog result
        self.button1.DialogResult = DialogResult.OK;        
        
        #add controls to form 
        self.Controls.Add(self.label)
        self.Controls.Add(self.textbox)
        self.Controls.Add(self.button1)       
        
        #Todo: Handel Close Input Box Event 
     


def MyInputBox(message, title, defaultText):
    form = MyInputBoxClass(message, title, defaultText)
    form.ShowDialog()  
    #Application.Run(form2) #this is not working, you need ShowDialog for modal form    
    return form.textbox.Text



def TestGui(analysis_obj):
    #This function is beeing called from API
    
    inputTextFromDialogBox = MyInputBox("Please Enter Example Text","ExampleInputBox","Its working but I'm not convinced")
    print ("Input Box Return Value is '%s'"%inputTextFromDialogBox)
    #ExtAPI.Log.WriteMessage("Input Box Return Value is '%s'"%inputTextFromDialogBox)

Upvotes: 1

Related Questions