原文: http://zetcode.com/tutorials/ironpythontutorial/controlsII/

在 IronPython Mono Winforms 教程的这一部分中,我们将继续介绍基本的 Mono Winforms 控件。

RadioButton

与其他RadioButton控件配对时,RadioButton控件使用户能够从一组选项中选择一个选项。 GroupBox控件用于将单选按钮配对在一起。

radiobutton.py

  1. #!/usr/bin/ipy
  2. import clr
  3. clr.AddReference("System.Windows.Forms")
  4. clr.AddReference("System.Drawing")
  5. from System.Windows.Forms import Application, Form, StatusBar
  6. from System.Windows.Forms import RadioButton, GroupBox
  7. from System.Drawing import Size, Point
  8. class IForm(Form):
  9. def __init__(self):
  10. self.Text = "RadioButton"
  11. self.Size = Size(240, 240)
  12. gb = GroupBox()
  13. gb.Text = "Sex"
  14. gb.Size = Size(120, 110)
  15. gb.Location = Point(20, 20)
  16. gb.Parent = self
  17. male = RadioButton()
  18. male.Text = "Male"
  19. male.Parent = gb
  20. male.Location = Point(10, 30)
  21. male.CheckedChanged += self.OnChanged
  22. female = RadioButton()
  23. female.Text = "Female"
  24. female.Parent = gb
  25. female.Location = Point(10, 60)
  26. female.CheckedChanged += self.OnChanged
  27. self.statusbar = StatusBar()
  28. self.statusbar.Parent = self
  29. self.CenterToScreen()
  30. def OnChanged(self, sender, event):
  31. if sender.Checked:
  32. self.statusbar.Text = sender.Text
  33. Application.Run(IForm())

在我们的示例中,我们在一个组框中显示了两个单选按钮。 一次只能选择一个选项。 选项值显示在状态栏中。

  1. gb = GroupBox()
  2. gb.Text = "Sex"

GroupBox控件用于将单选按钮组合在一起。 这样,我们一次只能选择一个单选按钮控件。

  1. male = RadioButton()
  2. male.Text = "Male"
  3. male.Parent = gb

创建带有文本"Male"RadioButton控件。 它的父级是组框控件。

  1. def OnChanged(self, sender, event):
  2. if sender.Checked:
  3. self.statusbar.Text = sender.Text

OnChanged()方法将当前所选单选按钮的文本设置为状态栏控件。

Mono Winforms 中的基本控件 II - 图1

图:RadioButton

MonthCalendar

在下一个示例中,我们将显示MonthCalendar控件。 MonthCalendar控件允许用户使用视觉显示选择日期。

monthcalendar.py

  1. #!/usr/bin/ipy
  2. import clr
  3. clr.AddReference("System.Windows.Forms")
  4. clr.AddReference("System.Drawing")
  5. from System.Windows.Forms import Application, Form
  6. from System.Windows.Forms import Label, MonthCalendar
  7. from System.Drawing import Size, Point
  8. class IForm(Form):
  9. def __init__(self):
  10. self.Text = 'MonthCalendar'
  11. self.Size = Size(240, 240)
  12. calendar = MonthCalendar()
  13. calendar.Parent = self
  14. calendar.Location = Point(20, 20)
  15. calendar.DateSelected += self.OnSelected
  16. self.date = Label()
  17. self.date.Location = Point(30, 180)
  18. self.date.Parent = self
  19. dt = calendar.SelectionStart
  20. self.date.Text = str(dt.Month) + "/" + str(dt.Day) + "/" + str(dt.Year)
  21. self.CenterToScreen()
  22. def OnSelected(self, sender, event):
  23. dt = sender.SelectionStart
  24. self.date.Text = str(dt.Month) + "/" + str(dt.Day) + "/" + str(dt.Year)
  25. Application.Run(IForm())

在示例中,我们显示了MonthCalendarLabel

  1. calendar = MonthCalendar()
  2. ...
  3. self.date = Label()

我们有两个控件。 一个MonthCalendar和一个Label。 后者显示当前选择的日期。

  1. def OnSelected(self, sender, event):
  2. dt = sender.SelectionStart
  3. self.date.Text = str(dt.Month) + "/" + str(dt.Day) + "/" + str(dt.Year)

当我们从MonthCalendar中选择一个日期时,就会调用OnSelected()方法。 SelectionStart属性获取所选日期范围的开始日期。

Mono Winforms 中的基本控件 II - 图2

图:MonthCalendar

TextBox

TextBox控件用于显示或接受某些文本。 文本可以是单行或多行。 此控件还可以进行密码屏蔽。

textbox.py

  1. #!/usr/bin/ipy
  2. import clr
  3. clr.AddReference("System.Windows.Forms")
  4. clr.AddReference("System.Drawing")
  5. from System.Windows.Forms import Application, Form
  6. from System.Windows.Forms import Label, TextBox
  7. from System.Drawing import Size, Point
  8. class IForm(Form):
  9. def __init__(self):
  10. self.Text = 'TextBox'
  11. self.text = Label()
  12. self.text.Parent = self
  13. self.text.Text = "..."
  14. self.text.AutoSize = True
  15. self.text.Location = Point(60, 40)
  16. tbox = TextBox()
  17. tbox.Parent = self
  18. tbox.Location = Point(60, 100)
  19. tbox.KeyUp += self.OnKeyUp
  20. self.Size = Size(250, 200)
  21. self.CenterToScreen()
  22. def OnKeyUp(self, sender, event):
  23. self.text.Text = sender.Text
  24. Application.Run(IForm())

本示例显示一个文本框和一个标签。 我们在文本框中键入的文本将立即显示在标签控件中。

  1. self.text = Label()
  2. ...
  3. self.text.AutoSize = True

Label控件已创建。 AutoSize属性确保Label增长以显示文本。

  1. tbox = TextBox()
  2. ...
  3. tbox.KeyUp += self.OnKeyUp

我们将KeyUp事件插入到TextBox控件中。 释放按键时,将调用OnKeyUp()方法。

  1. def OnKeyUp(self, sender, event):
  2. self.text.Text = sender.Text

OnKeyUp()方法中,我们使用文本框控件中的文本更新了标签控件。

Mono Winforms 中的基本控件 II - 图3

图:TextBox

PictureBox

PictureBox控件用于在表单上显示图片。

picturebox.py

  1. #!/usr/bin/ipy
  2. import sys
  3. import clr
  4. clr.AddReference("System.Windows.Forms")
  5. clr.AddReference("System.Drawing")
  6. from System.Windows.Forms import Application, Form, PictureBox
  7. from System.Drawing import Size, Point, Bitmap
  8. class IForm(Form):
  9. def __init__(self):
  10. self.Text = 'PictureBox'
  11. try:
  12. castle = Bitmap('redrock.png')
  13. except Exception, e:
  14. print 'Cannot read image file'
  15. print e.msg
  16. sys.exit(1)
  17. pb = PictureBox()
  18. pb.Parent = self
  19. pb.Size = Size(castle.Width, castle.Height)
  20. pb.Location = Point(2, 2)
  21. pb.Image = castle
  22. self.Size = Size(castle.Width, castle.Height)
  23. self.CenterToScreen()
  24. Application.Run(IForm())

该示例显示了表单上的 png 图像。

  1. try:
  2. castle = Bitmap('redrock.png')
  3. except Exception, e:
  4. print 'Cannot read image file'
  5. print e.msg
  6. sys.exit(1)

我们从当前工作目录中获得一个位图。

  1. pb = PictureBox()

PictureBox控件已创建。

  1. pb.Image = castle

Image属性指向我们创建的位图。

  1. self.Size = Size(castle.Width, castle.Height)

窗体的大小等于位图的大小。

Mono Winforms 中的基本控件 II - 图4

图:PictureBox

我们已经完成了 Mono Winforms 编程教程的这一章,专门讨论基本控件。