http://zetcode.com/tutorials/ironpythontutorial/menustoolbars/

在 IronPython Mono Winforms 教程的这一部分中,我们将讨论菜单和工具栏。

菜单栏是 GUI 应用中最可见的部分之一。 它是位于各个菜单中的一组命令。 在控制台应用中,您必须记住所有这些神秘命令,在这里,我们将大多数命令分组为逻辑部分。 有公认的标准可以进一步减少学习新应用的时间。

简单菜单

在第一个示例中,我们创建一个简单的菜单。

simplemenu.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 Keys, MenuStrip, ToolStripMenuItem
  7. from System.Drawing import Size
  8. class IForm(Form):
  9. def __init__(self):
  10. self.Text = 'Simple Menu'
  11. self.Size = Size(250, 200)
  12. ms = MenuStrip()
  13. ms.Parent = self
  14. filem = ToolStripMenuItem("&File")
  15. exit = ToolStripMenuItem("&Exit", None,
  16. self.OnExit)
  17. exit.ShortcutKeys = Keys.Control | Keys.X
  18. filem.DropDownItems.Add(exit)
  19. ms.Items.Add(filem)
  20. self.MainMenuStrip = ms
  21. self.CenterToScreen()
  22. def OnExit(self, sender, event):
  23. self.Close()
  24. Application.Run(IForm())

在我们的示例中,我们有一个菜单栏和一个菜单。 菜单内有一个菜单项。 如果选择菜单项,则应用关闭。

注意如何关闭应用。 我们可以使用 Ctrl + X 快捷方式或按 Alt + F + E 键关闭它 。

  1. ms = MenuStrip()

MenuStrip为我们的表单创建一个菜单系统。 我们将ToolStripMenuItem对象添加到MenuStrip,它们表示菜单结构中的各个菜单命令。 每个ToolStripMenuItem可以是您的应用的命令,也可以是其他子菜单项的父菜单。

  1. filem = ToolStripMenuItem("&File")

在这里,我们创建一个菜单。

  1. exit = ToolStripMenuItem("&Exit", None,
  2. self.OnExit)

此行创建退出菜单项。

  1. exit.ShortcutKeys = Keys.Control | Keys.X

我们提供了退出菜单项的快捷方式。

  1. filem.DropDownItems.Add(exit)

退出菜单项将添加到菜单对象的下拉项中。

  1. ms.Items.Add(filem)

在这里,我们将菜单对象添加到菜单栏中。

  1. self.MainMenuStrip = ms

MenuStrip已插入表格。

菜单和工具栏 - 图1

图:简单菜单

子菜单

每个菜单项也可以有一个子菜单。 这样,我们可以将类似的命令分组。 例如,我们可以将隐藏或显示各种工具栏(例如个人栏,地址栏,状态栏或导航栏)的命令放入称为工具栏的子菜单中。

submenu.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 MenuStrip, ToolStripMenuItem
  7. from System.Drawing import Size
  8. class IForm(Form):
  9. def __init__(self):
  10. self.Text = 'Simple Menu'
  11. self.Size = Size(380, 200)
  12. ms = MenuStrip()
  13. ms.Parent = self
  14. filem = ToolStripMenuItem("&File")
  15. exit = ToolStripMenuItem("&Exit", None,
  16. self.OnExit)
  17. importm = ToolStripMenuItem()
  18. importm.Text = "Import"
  19. filem.DropDownItems.Add(importm)
  20. temp = ToolStripMenuItem()
  21. temp.Text = "Import newsfeed list..."
  22. importm.DropDownItems.Add(temp)
  23. temp = ToolStripMenuItem()
  24. temp.Text = "Import bookmarks..."
  25. importm.DropDownItems.Add(temp)
  26. temp = ToolStripMenuItem()
  27. temp.Text = "Import mail..."
  28. importm.DropDownItems.Add(temp)
  29. filem.DropDownItems.Add(exit)
  30. ms.Items.Add(filem)
  31. self.MainMenuStrip = ms
  32. self.CenterToScreen()
  33. def OnExit(self, sender, event):
  34. self.Close()
  35. Application.Run(IForm())

在此示例中,我们创建一个子菜单。 子菜单导入具有三个菜单项。

  1. importm = ToolStripMenuItem()
  2. importm.Text = "Import"

ToolStripMenuItem可以是菜单或菜单项。 在这里它将作为子菜单。

  1. temp = ToolStripMenuItem()
  2. temp.Text = "Import newsfeed list..."
  3. importm.DropDownItems.Add(temp)

在这里,我们创建一个菜单项并将其添加到“导入”子菜单。

菜单和工具栏 - 图2

图:子菜单

检查菜单项

下一个代码示例演示如何创建选中的菜单项。

checkmenuitem.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 Shortcut, MainMenu, MenuItem
  7. from System.Drawing import Size
  8. class IForm(Form):
  9. def __init__(self):
  10. self.Text = 'Simple Menu'
  11. self.sb = StatusBar()
  12. self.sb.Parent = self
  13. self.sb.Text = "Ready"
  14. mainMenu = MainMenu()
  15. filem = mainMenu.MenuItems.Add("&File")
  16. filem.MenuItems.Add(MenuItem("E&xit",
  17. self.OnExit, Shortcut.CtrlX))
  18. view = mainMenu.MenuItems.Add("&View")
  19. self.viewStatusBar = MenuItem("View StatusBar")
  20. self.viewStatusBar.Checked = True
  21. self.viewStatusBar.Click += self.ToggleStatusBar
  22. view.MenuItems.Add(self.viewStatusBar)
  23. self.Menu = mainMenu
  24. self.Size = Size(250, 200)
  25. self.CenterToScreen()
  26. def OnExit(self, sender, event):
  27. self.Close()
  28. def ToggleStatusBar(self, sender, event):
  29. check = self.viewStatusBar.Checked
  30. if (check):
  31. self.sb.Visible = False
  32. self.viewStatusBar.Checked = False
  33. else:
  34. self.sb.Visible = True
  35. self.viewStatusBar.Checked = True
  36. Application.Run(IForm())

我们有两个菜单:“文件”和“查看”。 “查看”菜单具有一个菜单项,用于切换状态栏的可见性。

  1. mainMenu = MainMenu()

在此示例中,我们使用MainMenu控件。 要创建菜单栏,我们可以使用MainMenuMenuStrip控件。 后者具有一些附加功能。

  1. self.viewStatusBar.Checked = True

默认情况下会选中此菜单项,因为状态栏从应用的开始就可见。

  1. check = self.viewStatusBar.Checked
  2. if (check):
  3. self.sb.Visible = False
  4. self.viewStatusBar.Checked = False
  5. else:
  6. self.sb.Visible = True
  7. self.viewStatusBar.Checked = True

我们确定菜单项是否被选中。 我们根据check值显示和隐藏状态栏和复选标记。

菜单和工具栏 - 图3

图:选中菜单项

图像,分隔符

我们将进一步增强对MenuStrip控件的了解。 我们将创建一个带有图像的菜单项,并显示如何使用分隔符将其分开。

menustrip.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, MenuStrip
  6. from System.Windows.Forms import ToolStripMenuItem, ToolStripSeparator
  7. from System.Drawing import Size, Image
  8. class IForm(Form):
  9. def __init__(self):
  10. self.Text = 'MenuStrip'
  11. self.Size = Size(250, 200)
  12. menuStrip = MenuStrip()
  13. titem1 = ToolStripMenuItem("File")
  14. menuStrip.Items.Add(titem1)
  15. titem2 = ToolStripMenuItem("Tools")
  16. menuStrip.Items.Add(titem2)
  17. subm1 = ToolStripMenuItem("New")
  18. subm1.Image = Image.FromFile("new.png")
  19. titem1.DropDownItems.Add(subm1)
  20. subm2 = ToolStripMenuItem("Open")
  21. subm2.Image = Image.FromFile("open.png")
  22. titem1.DropDownItems.Add(subm2)
  23. titem1.DropDownItems.Add(ToolStripSeparator())
  24. subm3 = ToolStripMenuItem("Exit")
  25. subm3.Image = Image.FromFile("exit.png")
  26. titem1.DropDownItems.Add(subm3)
  27. subm3.Click += self.OnExit
  28. self.Controls.Add(menuStrip)
  29. self.MainMenuStrip = menuStrip
  30. self.CenterToScreen()
  31. def OnExit(self, sender, event):
  32. self.Close()
  33. Application.Run(IForm())

在代码示例中,我们有两个菜单:“文件”和“工具”。 在文件中,我们有三个带有图像的菜单项。 我们还有一个分隔符。 在此示例中,png 图像必须位于当前工作目录中。

  1. subm1 = ToolStripMenuItem("New")
  2. subm1.Image = Image.FromFile("new.png")
  3. titem1.DropDownItems.Add(subm1)

在这里,我们创建第一个菜单项。 要将图像添加到项目,我们将Image属性设置为图像。 我们使用FromFile()方法从指定的文件创建一个Image

  1. titem1.DropDownItems.Add(ToolStripSeparator())

在这里,我们向“文件”菜单添加分隔符。

菜单和工具栏 - 图4

图:图像 s and separator

工具栏

菜单将我们可以在应用中使用的所有命令分组。 使用工具栏可以快速访问最常用的命令。 ToolBar控件用于显示ToolBarButton控件。 我们可以通过创建ImageList将图像分配给按钮。 然后,我们将图像列表分配给工具栏的ImageList属性,并为每个ToolBarButton将图像索引值分配给ImageIndex属性。

toolbar.py

  1. #!/usr/bin/ipy
  2. import clr
  3. clr.AddReference("System.Windows.Forms")
  4. clr.AddReference("System.Drawing")
  5. clr.AddReference("System")
  6. from System.Windows.Forms import Application, Form
  7. from System.Windows.Forms import ToolBar, ToolBarButton, ImageList
  8. from System.Drawing import Size, Icon
  9. class IForm(Form):
  10. def __init__(self):
  11. self.Text = 'Simple ToolBar'
  12. self.Size = Size(250, 200)
  13. toolBar = ToolBar()
  14. toolBarIcons = ImageList()
  15. save = ToolBarButton()
  16. exit = ToolBarButton()
  17. save.ImageIndex = 0
  18. save.Tag = "Save"
  19. exit.ImageIndex = 1
  20. exit.Tag = "Exit"
  21. toolBar.ImageList = toolBarIcons
  22. toolBar.ShowToolTips = True
  23. toolBar.Buttons.AddRange((save, exit))
  24. toolBar.ButtonClick += self.OnClicked
  25. toolBarIcons.ImageSize = Size(16, 16)
  26. toolBarIcons.Images.Add(Icon("new.ico"))
  27. toolBarIcons.Images.Add(Icon("exit.ico"))
  28. self.Controls.Add(toolBar)
  29. self.CenterToScreen()
  30. def OnClicked(self, sender, event):
  31. if event.Button.Tag == "Exit":
  32. self.Close()
  33. Application.Run(IForm())

在我们的示例中,我们在工具栏上显示了两个按钮。

  1. toolBar = ToolBar()

在这里,我们创建ToolBar控件。

  1. toolBarIcons = ImageList()

创建图像列表。

  1. save = ToolBarButton()
  2. exit = ToolBarButton()

这是两个工具栏按钮。

  1. save.ImageIndex = 0

我们确定图像列表中的哪个图标将用于保存工具栏按钮。

  1. toolBar.Buttons.AddRange((save, exit))

ToolBarButton控件已添加到工具栏。

  1. toolBarIcons.Images.Add(Icon("new.ico"))
  2. toolBarIcons.Images.Add(Icon("exit.ico"))

图标将添加到图像列表。

  1. if event.Button.Tag == "Exit":
  2. self.Close()

如果按钮的标签等于"Exit",我们将关闭该应用。

菜单和工具栏 - 图5

图:工具栏

IronPython Winforms 教程的这一部分是关于菜单和工具栏的。