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

在 PyGTK 编程教程的这一部分中,我们将介绍对话框。

对话框窗口或对话框是大多数现代 GUI 应用必不可少的部分。 对话被定义为两个或更多人之间的对话。 在计算机应用中,对话框是一个窗口,用于与应用“对话”。 反之亦然。 对话框用于输入数据,修改数据,更改应用设置等。对话框是用户与计算机程序之间进行通信的重要手段。

MessageDialog

消息对话框是方便的对话框,可向应用的用户提供消息。 该消息包含文本和图像数据。

messages.py

  1. #!/usr/bin/python
  2. # ZetCode PyGTK tutorial
  3. #
  4. # This example shows message
  5. # dialogs
  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_size_request(250, 100)
  15. self.set_position(gtk.WIN_POS_CENTER)
  16. self.connect("destroy", gtk.main_quit)
  17. self.set_title("Message dialogs")
  18. table = gtk.Table(2, 2, True);
  19. info = gtk.Button("Information")
  20. warn = gtk.Button("Warning")
  21. ques = gtk.Button("Question")
  22. erro = gtk.Button("Error")
  23. info.connect("clicked", self.on_info)
  24. warn.connect("clicked", self.on_warn)
  25. ques.connect("clicked", self.on_ques)
  26. erro.connect("clicked", self.on_erro)
  27. table.attach(info, 0, 1, 0, 1)
  28. table.attach(warn, 1, 2, 0, 1)
  29. table.attach(ques, 0, 1, 1, 2)
  30. table.attach(erro, 1, 2, 1, 2)
  31. self.add(table)
  32. self.show_all()
  33. def on_info(self, widget):
  34. md = gtk.MessageDialog(self,
  35. gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO,
  36. gtk.BUTTONS_CLOSE, "Download completed")
  37. md.run()
  38. md.destroy()
  39. def on_erro(self, widget):
  40. md = gtk.MessageDialog(self,
  41. gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR,
  42. gtk.BUTTONS_CLOSE, "Error loading file")
  43. md.run()
  44. md.destroy()
  45. def on_ques(self, widget):
  46. md = gtk.MessageDialog(self,
  47. gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION,
  48. gtk.BUTTONS_CLOSE, "Are you sure to quit?")
  49. md.run()
  50. md.destroy()
  51. def on_warn(self, widget):
  52. md = gtk.MessageDialog(self,
  53. gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_WARNING,
  54. gtk.BUTTONS_CLOSE, "Unallowed operation")
  55. md.run()
  56. md.destroy()
  57. PyApp()
  58. gtk.main()

在我们的示例中,我们将显示四种消息对话框。 信息,警告,问题和错误消息对话框。

  1. info = gtk.Button("Information")
  2. warn = gtk.Button("Warning")
  3. ques = gtk.Button("Question")
  4. erro = gtk.Button("Error")

我们有四个按钮。 这些按钮中的每个按钮都会显示不同类型的消息对话框。

  1. md = gtk.MessageDialog(self,
  2. gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_INFO,
  3. gtk.BUTTONS_CLOSE, "Download completed")
  4. md.run()
  5. md.destroy()

如果单击信息按钮,将显示“信息”对话框。 MESSAGE_INFO指定对话框的类型。 BUTTONS_CLOSE指定要在对话框中显示的按钮。 最后一个参数是显示的消息。 该对话框使用run()方法显示。 程序员还必须调用destroy()hide()方法。

PyGTK 中的对话框 - 图1

PyGTK 中的对话框 - 图2

PyGTK 中的对话框 - 图3

PyGTK 中的对话框 - 图4

AboutDialog

AboutDialog显示有关应用的信息。 AboutDialog可以显示徽标,应用名称,版本,版权,网站或许可证信息。 也有可能对作者,文档撰写者,翻译者和艺术家予以赞扬。

aboutdialog.py

  1. #!/usr/bin/python
  2. # ZetCode PyGTK tutorial
  3. #
  4. # This example demonstrates the
  5. # AboutDialog dialog
  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_size_request(300, 150)
  15. self.set_position(gtk.WIN_POS_CENTER)
  16. self.connect("destroy", gtk.main_quit)
  17. self.set_title("About battery")
  18. button = gtk.Button("About")
  19. button.set_size_request(80, 30)
  20. button.connect("clicked", self.on_clicked)
  21. fix = gtk.Fixed()
  22. fix.put(button, 20, 20)
  23. self.add(fix)
  24. self.show_all()
  25. def on_clicked(self, widget):
  26. about = gtk.AboutDialog()
  27. about.set_program_name("Battery")
  28. about.set_version("0.1")
  29. about.set_copyright("(c) Jan Bodnar")
  30. about.set_comments("Battery is a simple tool for battery checking")
  31. about.set_website("http://www.zetcode.com")
  32. about.set_logo(gtk.gdk.pixbuf_new_from_file("battery.png"))
  33. about.run()
  34. about.destroy()
  35. PyApp()
  36. gtk.main()

该代码示例使用具有某些功能的AboutDialog

  1. about = gtk.AboutDialog()

我们创建一个AboutDialog

  1. about = gtk.AboutDialog()
  2. about.set_program_name("Battery")
  3. about.set_version("0.1")
  4. about.set_copyright("(c) Jan Bodnar")

我们指定名称,版本和版权。

  1. about.set_logo(gtk.gdk.pixbuf_new_from_file("battery.png"))

此行创建徽标。

PyGTK 中的对话框 - 图5

图:AboutDialog

FontSelectionDialog

FontSelectionDialog是用于选择字体的对话框。 它通常用于进行一些文本编辑或格式化的应用中。

fontdialog.py

  1. #!/usr/bin/python
  2. # ZetCode PyGTK tutorial
  3. #
  4. # This example works with the
  5. # FontSelection dialog
  6. #
  7. # author: jan bodnar
  8. # website: zetcode.com
  9. # last edited: February 2009
  10. import gtk
  11. import pango
  12. class PyApp(gtk.Window):
  13. def __init__(self):
  14. gtk.Window.__init__(self)
  15. self.set_size_request(300, 150)
  16. self.set_position(gtk.WIN_POS_CENTER)
  17. self.connect("destroy", gtk.main_quit)
  18. self.set_title("Font Selection Dialog")
  19. self.label = gtk.Label("The only victory over love is flight.")
  20. button = gtk.Button("Select font")
  21. button.connect("clicked", self.on_clicked)
  22. fix = gtk.Fixed()
  23. fix.put(button, 100, 30)
  24. fix.put(self.label, 30, 90)
  25. self.add(fix)
  26. self.show_all()
  27. def on_clicked(self, widget):
  28. fdia = gtk.FontSelectionDialog("Select font name")
  29. response = fdia.run()
  30. if response == gtk.RESPONSE_OK:
  31. font_desc = pango.FontDescription(fdia.get_font_name())
  32. if font_desc:
  33. self.label.modify_font(font_desc)
  34. fdia.destroy()
  35. PyApp()
  36. gtk.main()

在代码示例中,我们有一个按钮和一个标签。 单击按钮显示FontSelectionDialog

  1. fdia = gtk.FontSelectionDialog("Select font name")

我们创建了FontSelectionDialog.

  1. if response == gtk.RESPONSE_OK:
  2. font_desc = pango.FontDescription(fdia.get_font_name())
  3. if font_desc:
  4. self.label.modify_font(font_desc)

如果单击“确定”按钮,则标签小部件的字体将更改为我们在对话框中选择的字体。

PyGTK 中的对话框 - 图6

图:FontSelectionDialog

ColorSelectionDialog

ColorSelectionDialog是用于选择颜色的对话框。

colordialog.py

  1. #!/usr/bin/python
  2. # ZetCode PyGTK tutorial
  3. #
  4. # This example works with the
  5. # ColorSelection dialog
  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_size_request(300, 150)
  15. self.set_position(gtk.WIN_POS_CENTER)
  16. self.connect("destroy", gtk.main_quit)
  17. self.set_title("Color Selection Dialog")
  18. self.label = gtk.Label("The only victory over love is flight.")
  19. button = gtk.Button("Select color")
  20. button.connect("clicked", self.on_clicked)
  21. fix = gtk.Fixed()
  22. fix.put(button, 100, 30)
  23. fix.put(self.label, 30, 90)
  24. self.add(fix)
  25. self.show_all()
  26. def on_clicked(self, widget):
  27. cdia = gtk.ColorSelectionDialog("Select color")
  28. response = cdia.run()
  29. if response == gtk.RESPONSE_OK:
  30. colorsel = cdia.colorsel
  31. color = colorsel.get_current_color()
  32. self.label.modify_fg(gtk.STATE_NORMAL, color)
  33. cdia.destroy()
  34. PyApp()
  35. gtk.main()

该示例与上一个示例非常相似。 这次我们更改标签的颜色。

  1. cdia = gtk.ColorSelectionDialog("Select color")

我们创建ColorSelectionDialog

  1. if response == gtk.RESPONSE_OK:
  2. colorsel = cdia.colorsel
  3. color = colorsel.get_current_color()
  4. self.label.modify_fg(gtk.STATE_NORMAL, color)

如果用户按下 OK,我们将获得颜色并修改标签的颜色。

PyGTK 中的对话框 - 图7

图:颜色 electionDialog

在 PyGTK 编程教程的这一部分中,我们使用了 PyGTK 内置对话框。