原文: http://zetcode.com/gui/pygtk/toolbars/

在 PyGTK 编程教程的这一部分中,我们将使用工具栏。

菜单将我们可以在应用中使用的命令分组。 使用工具栏可以快速访问最常用的命令。

简单的工具栏

接下来,我们创建一个简单的工具栏。

toolbar.py

  1. #!/usr/bin/python
  2. # ZetCode PyGTK tutorial
  3. #
  4. # This example shows a toolbar
  5. # widget
  6. #
  7. # author: jan bodnar
  8. # website: zetcode.com
  9. # last edited: February 2009
  10. import gtk
  11. class PyApp(gtk.Window):
  12. def __init__(self):
  13. super(PyApp, self).__init__()
  14. self.set_title("Toolbar")
  15. self.set_size_request(250, 200)
  16. self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(6400, 6400, 6440))
  17. self.set_position(gtk.WIN_POS_CENTER)
  18. toolbar = gtk.Toolbar()
  19. toolbar.set_style(gtk.TOOLBAR_ICONS)
  20. newtb = gtk.ToolButton(gtk.STOCK_NEW)
  21. opentb = gtk.ToolButton(gtk.STOCK_OPEN)
  22. savetb = gtk.ToolButton(gtk.STOCK_SAVE)
  23. sep = gtk.SeparatorToolItem()
  24. quittb = gtk.ToolButton(gtk.STOCK_QUIT)
  25. toolbar.insert(newtb, 0)
  26. toolbar.insert(opentb, 1)
  27. toolbar.insert(savetb, 2)
  28. toolbar.insert(sep, 3)
  29. toolbar.insert(quittb, 4)
  30. quittb.connect("clicked", gtk.main_quit)
  31. vbox = gtk.VBox(False, 2)
  32. vbox.pack_start(toolbar, False, False, 0)
  33. self.add(vbox)
  34. self.connect("destroy", gtk.main_quit)
  35. self.show_all()
  36. PyApp()
  37. gtk.main()

该示例显示了一个工具栏和四个工具按钮。

  1. toolbar = gtk.Toolbar()

Toolbar小部件已创建。

  1. toolbar.set_style(gtk.TOOLBAR_ICONS)

在工具栏上,我们仅显示图标。 没有文字。

  1. newtb = gtk.ToolButton(gtk.STOCK_NEW)

创建带有库存图像的ToolButton

  1. sep = gtk.SeparatorToolItem()

这是一个分隔符。 它可用于将工具栏按钮分组为逻辑组。

  1. toolbar.insert(newtb, 0)
  2. toolbar.insert(opentb, 1)
  3. ...

工具栏按钮插入到工具栏小部件中。

PyGTK 中的工具栏 - 图1

图:工具栏

工具栏

在第二个示例中,我们显示了两个工具栏。 许多应用具有多个工具栏。 我们展示了如何在 PyGTK 中做到这一点。

toolbars.py

  1. #!/usr/bin/python
  2. # ZetCode PyGTK tutorial
  3. #
  4. # This example shows two toolbars
  5. # in the application window
  6. #
  7. # author: jan bodnar
  8. # website: zetcode.com
  9. # last edited: February 2009
  10. import gtk
  11. class PyApp(gtk.Window):
  12. def __init__(self):
  13. super(PyApp, self).__init__()
  14. self.set_title("Toolbars")
  15. self.set_size_request(350, 300)
  16. self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(6400, 6400, 6440))
  17. self.set_position(gtk.WIN_POS_CENTER)
  18. upper = gtk.Toolbar()
  19. upper.set_style(gtk.TOOLBAR_ICONS)
  20. newtb = gtk.ToolButton(gtk.STOCK_NEW)
  21. opentb = gtk.ToolButton(gtk.STOCK_OPEN)
  22. savetb = gtk.ToolButton(gtk.STOCK_SAVE)
  23. upper.insert(newtb, 0)
  24. upper.insert(opentb, 1)
  25. upper.insert(savetb, 2)
  26. lower = gtk.Toolbar()
  27. lower.set_style(gtk.TOOLBAR_ICONS)
  28. quittb = gtk.ToolButton(gtk.STOCK_QUIT)
  29. quittb.connect("clicked", gtk.main_quit)
  30. lower.insert(quittb, 0)
  31. vbox = gtk.VBox(False, 0)
  32. vbox.pack_start(upper, False, False, 0)
  33. vbox.pack_start(lower, False, False, 0)
  34. self.add(vbox)
  35. self.connect("destroy", gtk.main_quit)
  36. self.show_all()
  37. PyApp()
  38. gtk.main()

我们的应用显示了两个工具栏。

  1. upper = gtk.Toolbar()
  2. ...
  3. lower = gtk.Toolbar()

我们创建两个Toolbar小部件。

  1. upper.insert(newtb, 0)
  2. ...
  3. lower.insert(quittb, 0)

它们每个都有自己的工具按钮。

  1. vbox = gtk.VBox(False, 0)
  2. vbox.pack_start(upper, False, False, 0)
  3. vbox.pack_start(lower, False, False, 0)

工具栏一个接一个地包装在垂直盒中。

PyGTK 中的工具栏 - 图2

图:工具栏 s

撤销重做

以下示例演示了如何停用工具栏上的工具栏按钮。 这是 GUI 编程中的常见做法。 例如,保存按钮。 如果我们将文档的所有更改都保存到磁盘上,则在大多数文本编辑器中,“保存”按钮将被禁用。 这样,应用会向用户指示所有更改都已保存。

undoredo.py

  1. #!/usr/bin/python
  2. # ZetCode PyGTK tutorial
  3. #
  4. # This example shows how to
  5. # activate/deactivate a ToolButton
  6. #
  7. # author: jan bodnar
  8. # website: zetcode.com
  9. # last edited: February 2009
  10. import gtk
  11. class PyApp(gtk.Window):
  12. def __init__(self):
  13. super(PyApp, self).__init__()
  14. self.set_title("Toolbar")
  15. self.set_size_request(250, 200)
  16. self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(6400, 6400, 6440))
  17. self.set_position(gtk.WIN_POS_CENTER)
  18. self.count = 2
  19. toolbar = gtk.Toolbar()
  20. toolbar.set_style(gtk.TOOLBAR_ICONS)
  21. self.undo = gtk.ToolButton(gtk.STOCK_UNDO)
  22. self.redo = gtk.ToolButton(gtk.STOCK_REDO)
  23. sep = gtk.SeparatorToolItem()
  24. quit = gtk.ToolButton(gtk.STOCK_QUIT)
  25. toolbar.insert(self.undo, 0)
  26. toolbar.insert(self.redo, 1)
  27. toolbar.insert(sep, 2)
  28. toolbar.insert(quit, 3)
  29. self.undo.connect("clicked", self.on_undo)
  30. self.redo.connect("clicked", self.on_redo)
  31. quit.connect("clicked", gtk.main_quit)
  32. vbox = gtk.VBox(False, 2)
  33. vbox.pack_start(toolbar, False, False, 0)
  34. self.add(vbox)
  35. self.connect("destroy", gtk.main_quit)
  36. self.show_all()
  37. def on_undo(self, widget):
  38. self.count = self.count - 1
  39. if self.count <= 0:
  40. self.undo.set_sensitive(False)
  41. self.redo.set_sensitive(True)
  42. def on_redo(self, widget):
  43. self.count = self.count + 1
  44. if self.count >= 5:
  45. self.redo.set_sensitive(False)
  46. self.undo.set_sensitive(True)
  47. PyApp()
  48. gtk.main()

我们的示例从 PyGTK 库存资源创建撤消和重做按钮。 单击几下后,每个按钮均被禁用。 按钮显示为灰色。

  1. self.count = 2

self.count变量决定哪个按钮被激活和禁用。

  1. self.undo = gtk.ToolButton(gtk.STOCK_UNDO)
  2. self.redo = gtk.ToolButton(gtk.STOCK_REDO)

我们有两个工具按钮。 撤消和重做工具按钮。 图片来自库存资源。

  1. self.undo.connect("clicked", self.on_undo)
  2. self.redo.connect("clicked", self.on_redo)

我们为两个工具按钮都插入了clicked信号的方法。

  1. if self.count <= 0:
  2. self.undo.set_sensitive(False)
  3. self.redo.set_sensitive(True)

要激活小部件,我们使用set_sensitive()方法。

PyGTK 中的工具栏 - 图3

图:撤销和重做

在 PyGTK 编程库的这一章中,我们提到了工具栏。