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

IronPython Mono Winforms 编程教程的这一部分将介绍基本控件。

Winforms 控件是应用的基本构建块。 Winforms 具有广泛的各种控件。 按钮,复选框,轨迹栏,标签等。程序员完成工作所需的一切。 在本教程的这一部分中,我们将描述几个有用的控件。

Label

Label是用于显示文本或图像的简单控件。 它没有得到关注。

label.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, Label
  7. from System.Drawing import Size, Point, Font
  8. text = """Meet you downstairs in the bar and heard
  9. Your rolled up sleeves and your skull t-shirt
  10. You say why did you do it with him today?
  11. And sniffed me out like I was tanqueray
  12. Cause you're my fella, my guy
  13. Hand me your stella and fly
  14. By the time I'm out the door
  15. You tear me down like roger moore
  16. I cheated myself
  17. Like I knew I would
  18. I told ya, I was trouble
  19. You know that I'm no good
  20. Upstairs in bed, with my ex boy
  21. He's in a place, but I cant get joy
  22. Thinking of you in the final throws, this is when my buzzer goes"""
  23. class IForm(Form):
  24. def __init__(self):
  25. self.Text = "You know I'm No Good"
  26. font = Font("Serif", 10)
  27. lyrics = Label()
  28. lyrics.Parent = self
  29. lyrics.Text = text
  30. lyrics.Font = font
  31. lyrics.Location = Point(10, 10)
  32. lyrics.Size = Size(290, 290)
  33. self.CenterToScreen()
  34. Application.Run(IForm())

在我们的示例中,我们在表单上显示了一些歌词。

  1. lyrics = Label()

Label控件已创建。

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

这是我们的文字。

  1. font = Font("Serif", 10)
  2. ...
  3. lyrics.Font = font

标签文本的字体设置为 10px Serif。

Mono Winforms 中的基本控件 - 图1

图:Label

CheckBox

CheckBox是具有两个状态的控件:开和关。 它是带有标签或图像的盒子。 如果选中CheckBox,则在方框中用勾号表示。 CheckBox可用于在启动时显示或隐藏启动画面,切换工具栏的可见性等。

checkbox.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, CheckBox
  6. from System.Drawing import Size, Point
  7. class IForm(Form):
  8. def __init__(self):
  9. self.Text = "CheckBox"
  10. self.Size = Size(220, 170)
  11. cb = CheckBox()
  12. cb.Parent = self
  13. cb.Location = Point(30, 30)
  14. cb.Text = "Show Title"
  15. cb.Checked = True
  16. cb.CheckedChanged += self.OnChanged
  17. self.CenterToScreen()
  18. def OnChanged(self, sender, event):
  19. if sender.Checked:
  20. self.Text = "CheckBox"
  21. else:
  22. self.Text = ""
  23. Application.Run(IForm())

我们的代码示例根据窗口的状态显示或隐藏窗口的标题。

  1. cb = CheckBox()

CheckBox控件已创建。

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

当应用启动时,我们显示标题。 然后将CheckBox控件设置为选中状态。

  1. cb.CheckedChanged += self.OnChanged

当我们单击CheckBox控件时,将触发CheckedChanged事件。

  1. if sender.Checked:
  2. self.Text = "CheckBox"
  3. else:
  4. self.Text = ""

在这里,我们切换窗口的标题。

Mono Winforms 中的基本控件 - 图2

图:CheckBox

TrackBar

TrackBar是一个组件,使用户可以通过在有限的间隔内滑动旋钮来以图形方式选择一个值。 我们的示例将显示音量控制。

trackbar.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.Windows.Forms import TrackBar, TickStyle
  8. from System.Drawing import Size, Point, Bitmap
  9. class IForm(Form):
  10. def __init__(self):
  11. self.Text = 'TrackBar'
  12. self.Size = Size(260, 190)
  13. tb = TrackBar()
  14. tb.Parent = self
  15. tb.Size = Size(150, 30)
  16. tb.Location = Point(30, 50)
  17. tb.TickStyle = TickStyle.None
  18. tb.SetRange(0, 100)
  19. tb.ValueChanged += self.OnChanged
  20. self.LoadImages()
  21. self.pb = PictureBox()
  22. self.pb.Parent = self
  23. self.pb.Location = Point(210, 50)
  24. self.pb.Image = self.mutep
  25. self.CenterToScreen()
  26. def LoadImages(self):
  27. try:
  28. self.mutep = Bitmap("mute.png")
  29. self.minp = Bitmap("min.png")
  30. self.medp = Bitmap("med.png")
  31. self.maxp = Bitmap("max.png")
  32. except Exception, e:
  33. print "Error reading images"
  34. print e.msg
  35. sys.exit(1)
  36. def OnChanged(self, sender, event):
  37. val = sender.Value
  38. if val == 0:
  39. self.pb.Image = self.mutep
  40. elif val > 0 and val <= 30:
  41. self.pb.Image = self.minp
  42. elif val > 30 and val < 80:
  43. self.pb.Image = self.medp
  44. else: self.pb.Image = self.maxp
  45. Application.Run(IForm())

在代码示例中,我们显示了TrackBarPictureBox。 通过拖动轨迹栏,我们可以在PictureBox控件上更改图像。

  1. tb = TrackBar()

TrackBar控件已创建。

  1. tb.TickStyle = TickStyle.None

我们对此TrackBar没有显示任何报价。

  1. self.pb = PictureBox()
  2. ...
  3. self.pb.Image = self.mutep

PictureBox控件已创建。 它用于显示图像。 开始时,它会显示静音图像。

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

在这里,我们将创建四个将要使用的图像。

  1. val = sender.Value
  2. if val == 0:
  3. self.pb.Image = self.mutep
  4. elif val > 0 and val <= 30:
  5. self.pb.Image = self.minp
  6. elif val > 30 and val < 80:
  7. self.pb.Image = self.medp
  8. else: self.pb.Image = self.maxp

我们确定TrackBar的值。 根据其值,我们更新PictureBox控件。

Mono Winforms 中的基本控件 - 图3

图:TrackBar

ComboBox

ComboBox是一个组合了按钮或可编辑字段和下拉列表的控件。 用户可以从下拉列表中选择一个值,该列表应用户的要求出现。 如果使组合框可编辑,则组合框将包含一个可编辑字段,用户可以在其中输入值。

combobox.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 ComboBox, Label
  7. from System.Drawing import Size, Point
  8. class IForm(Form):
  9. def __init__(self):
  10. self.Text = "ComboBox"
  11. self.Size = Size(240, 240)
  12. cb = ComboBox()
  13. cb.Parent = self
  14. cb.Location = Point(50, 30)
  15. cb.Items.AddRange(("Ubuntu",
  16. "Mandriva",
  17. "Red Hat",
  18. "Fedora",
  19. "Gentoo"))
  20. cb.SelectionChangeCommitted += self.OnChanged
  21. self.label = Label()
  22. self.label.Location = Point(50, 140)
  23. self.label.Parent = self
  24. self.label.Text = "..."
  25. self.CenterToScreen()
  26. def OnChanged(self, sender, event):
  27. self.label.Text = sender.Text
  28. Application.Run(IForm())

我们的代码编程示例显示了一个包含五个项目的组合框。 所选项目显示在标签控件中。

  1. cb = ComboBox()

ComboBox控件已创建。

  1. cb.Items.AddRange(("Ubuntu",
  2. "Mandriva",
  3. "Red Hat",
  4. "Fedora",
  5. "Gentoo"))

ComboBox控件中充满了项目。

  1. cb.SelectionChangeCommitted += self.OnChanged

如果我们从组合框中选择一个项目,则会触发SelectionChangeCommitted事件。

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

在这里,将从组合框中选择的文本复制到标签。

Mono Winforms 中的基本控件 - 图4

图:ComboBox

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