Ebooks

Basic Controls in Mono Winforms

This part of the IronPython Mono Winforms programming tutorial will be about basic controls.

Winforms controls are basic building blocks of an application. Winforms has a wide range of various controls. Buttons, check boxes, trackbars, labels etc. Everything a programmer needs for his job. In this section of the tutorial, we will describe several useful controls.

Label Control

Label is a simple control for displaying text or images. It does not receive focus.

label.py
#!/usr/bin/ipy

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

from System.Windows.Forms import Application, Form, Label
from System.Drawing import Size, Point, Font


text = """Meet you downstairs in the bar and heard
Your rolled up sleeves and your skull t-shirt
You say why did you do it with him today?
And sniffed me out like I was tanqueray

Cause you're my fella, my guy
Hand me your stella and fly
By the time I'm out the door
You tear me down like roger moore

I cheated myself
Like I knew I would
I told ya, I was trouble
You know that I'm no good

Upstairs in bed, with my ex boy
He's in a place, but I cant get joy
Thinking of you in the final throws, this is when my buzzer goes"""


class IForm(Form):

    def __init__(self):

        self.Text = "You know I'm No Good"

        font = Font("Serif", 10)

        lyrics = Label()
        lyrics.Parent = self
        lyrics.Text = text
        lyrics.Font = font
        lyrics.Location = Point(10, 10)
        lyrics.Size = Size(290, 290)

        self.CenterToScreen()


Application.Run(IForm())

In our example, we show some lyrics on the form.

lyrics = Label()

Label control is created.

text = """Meet you downstairs in the bar and heard 
        ... """

This is our text.

font = Font("Serif", 10)
...
lyrics.Font = font

The font of the text of the label is set to 10px Serif.

Label
Figure: Label

CheckBox

CheckBox is a control that has two states: on and off. It is a box with a label or an image. If the CheckBox is checked, it is represented by a tick in a box. A CheckBox can be used to show or hide splashscreen at startup, toggle visibility of a toolbar etc.

checkbox.py
#!/usr/bin/ipy

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

from System.Windows.Forms import Application, Form, CheckBox
from System.Drawing import Size, Point



class IForm(Form):

    def __init__(self):

        self.Text = "CheckBox"
        self.Size = Size(220, 170)

        cb = CheckBox()
        cb.Parent = self
        cb.Location = Point(30, 30)
        cb.Text = "Show Title"
        cb.Checked = True

        cb.CheckedChanged += self.OnChanged


        self.CenterToScreen()

    def OnChanged(self, sender, event):
        if sender.Checked:
            self.Text = "CheckBox"
        else:
            self.Text = ""
        
    
Application.Run(IForm())

Our code example shows or hides the title of the window depending on its state.

cb = CheckBox()

CheckBox control is created.

cb.Text = "Show Title"
cb.Checked = True

When the application starts, we show the title. And we set the CheckBox control to checked state.

cb.CheckedChanged += self.OnChanged

When we click on the CheckBox control, the CheckedChanged event is triggered.

if sender.Checked:
    self.Text = "CheckBox"
else:
    self.Text = ""

Here we toggle the title of the window.

CheckBox
Figure: CheckBox

TrackBar

TrackBar is a component that lets the user graphically select a value by sliding a knob within a bounded interval. Our example will show a volume control.

trackbar.py
#!/usr/bin/ipy

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

from System.Windows.Forms import Application, Form, PictureBox
from System.Windows.Forms import TrackBar, TickStyle
from System.Drawing import Size, Point, Bitmap


class IForm(Form):

    def __init__(self):
        self.Text = 'TrackBar'
        self.Size = Size(260, 190)
      

        tb = TrackBar()
        tb.Parent = self
        tb.Size = Size(150, 30)
        tb.Location = Point(30, 50)
        tb.TickStyle = TickStyle.None
        tb.SetRange(0, 100)

        tb.ValueChanged += self.OnChanged

        self.LoadImages()

        self.pb = PictureBox()
        self.pb.Parent = self
        self.pb.Location = Point(210, 50)
        self.pb.Image = self.mutep
        
        self.CenterToScreen()


    def LoadImages(self):
        try:
            self.mutep = Bitmap("mute.png")
            self.minp = Bitmap("min.png")
            self.medp = Bitmap("med.png")
            self.maxp = Bitmap("max.png")
        except Exception, e:
            print "Error reading images"
            print e.msg
            sys.exit(1)
    


    def OnChanged(self, sender, event): 
        val = sender.Value

        if val == 0: 
            self.pb.Image = self.mutep
        elif val > 0 and val <= 30:
            self.pb.Image = self.minp
        elif val > 30 and val < 80:
            self.pb.Image = self.medp
        else: self.pb.Image = self.maxp



Application.Run(IForm())

In the code example, we show a TrackBar and a PictureBox. By dragging the track bar, we change the image on the PictureBox control.

tb = TrackBar()

TrackBar control is created.

tb.TickStyle = TickStyle.None

We show no ticks for this TrackBar.

self.pb = PictureBox()
...
self.pb.Image = self.mutep

PictureBox control is created. It is used to display an image. At the start, it shows the mute image.

self.mutep = Bitmap("mute.png")
self.minp = Bitmap("min.png")
self.medp = Bitmap("med.png")
self.maxp = Bitmap("max.png")

Here we create four images that we will use.

val = sender.Value

if val == 0: 
    self.pb.Image = self.mutep
elif val > 0 and val <= 30:
    self.pb.Image = self.minp
elif val > 30 and val < 80:
    self.pb.Image = self.medp
else: self.pb.Image = self.maxp

We determine the value of the TrackBar. Depending on its value, we update the PictureBox control.

TrackBar
Figure: TrackBar

ComboBox

ComboBox is a control that combines a button or editable field and a drop-down list. The user can select a value from the drop-down list, which appears at the user's request. If you make the combo box editable, then the combo box includes an editable field into which the user can type a value.

combobox.py
#!/usr/bin/ipy

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

from System.Windows.Forms import Application, Form
from System.Windows.Forms import ComboBox, Label
from System.Drawing import Size, Point


class IForm(Form):

    def __init__(self):

        self.Text = "ComboBox"
        self.Size = Size(240, 240)

        cb = ComboBox()
        cb.Parent = self
        cb.Location = Point(50, 30)

        cb.Items.AddRange(("Ubuntu",
            "Mandriva",
            "Red Hat",
            "Fedora",
            "Gentoo"))

        cb.SelectionChangeCommitted += self.OnChanged

        self.label = Label()
        self.label.Location = Point(50, 140)
        self.label.Parent = self
        self.label.Text = "..."


        self.CenterToScreen()

    def OnChanged(self, sender, event):
         self.label.Text = sender.Text
    
    
Application.Run(IForm())

Our code programming example shows a combobox with five items. The selected item is shown in a label control.

cb = ComboBox()

ComboBox control is created.

cb.Items.AddRange(("Ubuntu",
    "Mandriva",
    "Red Hat",
    "Fedora",
    "Gentoo"))

The ComboBox control is filled with items.

cb.SelectionChangeCommitted += self.OnChanged

If we select an item from the combobox, the SelectionChangeCommitted event is triggered.

def OnChanged(self, sender, event):
    self.label.Text = sender.Text

Here the selected text from the combobox is copied to the label.

ComboBox
Figure: ComboBox

We have finished chapter of the IronPython Mono Winforms tutorial, dedicated to basic controls.