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

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

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

MessageDialog

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

  1. #!/usr/bin/ruby
  2. '''
  3. ZetCode Ruby GTK tutorial
  4. This example shows message dialogs.
  5. Author: Jan Bodnar
  6. Website: www.zetcode.com
  7. Last modified: May 2014
  8. '''
  9. require 'gtk3'
  10. class RubyApp < Gtk::Window
  11. def initialize
  12. super
  13. init_ui
  14. end
  15. def init_ui
  16. table = Gtk::Table.new 2, 2, true
  17. info = Gtk::Button.new :label => "Information"
  18. warn = Gtk::Button.new :label => "Warning"
  19. ques = Gtk::Button.new :label => "Question"
  20. erro = Gtk::Button.new :label => "Error"
  21. info.signal_connect "clicked" do
  22. on_info
  23. end
  24. warn.signal_connect "clicked" do
  25. on_warn
  26. end
  27. ques.signal_connect "clicked" do
  28. on_ques
  29. end
  30. erro.signal_connect "clicked" do
  31. on_erro
  32. end
  33. table.attach info, 0, 1, 0, 1
  34. table.attach warn, 1, 2, 0, 1
  35. table.attach ques, 0, 1, 1, 2
  36. table.attach erro, 1, 2, 1, 2
  37. add table
  38. set_title "Messages"
  39. signal_connect "destroy" do
  40. Gtk.main_quit
  41. end
  42. set_default_size 300, 100
  43. set_window_position :center
  44. show_all
  45. end
  46. def on_info
  47. md = Gtk::MessageDialog.new :parent => self,
  48. :flags => :destroy_with_parent, :type => :info,
  49. :buttons_type => :close, :message => "Download completed"
  50. md.run
  51. md.destroy
  52. end
  53. def on_erro
  54. md = Gtk::MessageDialog.new :parent => self,
  55. :flags => :modal, :type => :error,
  56. :buttons_type => :close, :message => "Error loading file"
  57. md.run
  58. md.destroy
  59. end
  60. def on_ques
  61. md = Gtk::MessageDialog.new :parent => self,
  62. :flags => :destroy_with_parent, :type => :question,
  63. :buttons_type => :close, :message => "Are you sure to quit?"
  64. md.run
  65. md.destroy
  66. end
  67. def on_warn
  68. md = Gtk::MessageDialog.new :parent => self,
  69. :flags => :destroy_with_parent, :type => :warning,
  70. :buttons_type => :close, :message => "Unallowed operation"
  71. md.run
  72. md.destroy
  73. end
  74. end
  75. Gtk.init
  76. window = RubyApp.new
  77. Gtk.main

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

  1. info = Gtk::Button.new :label => "Information"
  2. warn = Gtk::Button.new :label => "Warning"
  3. ques = Gtk::Button.new :label => "Question"
  4. erro = Gtk::Button.new :label => "Error"

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

  1. def on_info
  2. md = Gtk::MessageDialog.new :parent => self,
  3. :flags => :destroy_with_parent, :type => :info,
  4. :buttons_type => :close, :message => "Download completed"
  5. md.run
  6. md.destroy
  7. end

如果单击信息按钮,则会显示信息对话框。 Gtk::MessageDialog::INFO指定对话框的类型。 Gtk::MessageDialog::BUTTONS_CLOSE指定要在对话框中显示的按钮的类型。 最后一个参数是显示的消息。 该对话框使用run方法显示。 程序员还必须调用destroyhide方法。

Ruby GTK 中的对话框 - 图1

Ruby GTK 中的对话框 - 图2

Ruby GTK 中的对话框 - 图3

Ruby GTK 中的对话框 - 图4

AboutDialog

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

  1. #!/usr/bin/ruby
  2. '''
  3. ZetCode Ruby GTK tutorial
  4. This example demonstrates the
  5. Gtk::AboutDialog dialog.
  6. Author: Jan Bodnar
  7. Website: www.zetcode.com
  8. Last modified: May 2014
  9. '''
  10. require 'gtk3'
  11. class RubyApp < Gtk::Window
  12. def initialize
  13. super
  14. set_title "About dialog"
  15. signal_connect "destroy" do
  16. Gtk.main_quit
  17. end
  18. init_ui
  19. set_default_size 300, 150
  20. set_window_position :center
  21. show_all
  22. end
  23. def init_ui
  24. button = Gtk::Button.new :label => "About"
  25. button.set_size_request 80, 30
  26. button.signal_connect "clicked" do
  27. on_clicked
  28. end
  29. fix = Gtk::Fixed.new
  30. fix.put button, 20, 20
  31. add fix
  32. end
  33. def on_clicked
  34. about = Gtk::AboutDialog.new
  35. about.set_program_name "Battery"
  36. about.set_version "0.1"
  37. about.set_copyright "(c) Jan Bodnar"
  38. about.set_comments "Battery is a simple tool for battery checking"
  39. about.set_website "http://www.zetcode.com"
  40. begin
  41. logo = Gdk::Pixbuf.new :file => "batter.png"
  42. about.set_logo logo
  43. rescue IOError => e
  44. puts e
  45. puts "cannot load image"
  46. exit
  47. end
  48. about.run
  49. about.destroy
  50. end
  51. end
  52. Gtk.init
  53. window = RubyApp.new
  54. Gtk.main

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

  1. about = Gtk::AboutDialog.new

我们创建Gkt::AboutDialog小部件。

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

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

  1. begin
  2. logo = Gdk::Pixbuf.new :file => "batter.png"
  3. about.set_logo logo
  4. rescue IOError => e
  5. puts e
  6. puts "cannot load image"
  7. exit
  8. end

此行为对话框创建徽标。 执行一些错误检查。

Ruby GTK 中的对话框 - 图5

图:Gtk::AboutDialog

Gtk::FontSelectionDialog

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

  1. #!/usr/bin/ruby
  2. '''
  3. ZetCode Ruby GTK tutorial
  4. This example presents the Gtk::FontSelectionDialog.
  5. Author: Jan Bodnar
  6. Website: www.zetcode.com
  7. Last modified: May 2014
  8. '''
  9. require 'gtk3'
  10. class RubyApp < Gtk::Window
  11. def initialize
  12. super
  13. init_ui
  14. end
  15. def init_ui
  16. set_border_width 10
  17. @label = Gtk::Label.new "The only victory over love is flight."
  18. button = Gtk::Button.new :label => "Select font"
  19. button.signal_connect "clicked" do
  20. on_clicked
  21. end
  22. fix = Gtk::Fixed.new
  23. fix.put button, 100, 30
  24. fix.put @label, 30, 90
  25. add fix
  26. set_title "Gtk::FontSelectionDialog"
  27. signal_connect "destroy" do
  28. Gtk.main_quit
  29. end
  30. set_default_size 300, 150
  31. set_window_position :center
  32. show_all
  33. end
  34. def on_clicked
  35. fdia = Gtk::FontChooserDialog.new :title => "Select font name",
  36. :parent => nil
  37. response = fdia.run
  38. if response == Gtk::ResponseType::OK
  39. font_desc = Pango::FontDescription.new fdia.font_desc
  40. if font_desc
  41. @label.override_font font_desc
  42. end
  43. end
  44. fdia.destroy
  45. end
  46. end
  47. Gtk.init
  48. window = RubyApp.new
  49. Gtk.main

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

  1. fdia = Gtk::FontSelectionDialog.new "Select font name"

我们创建GtkFontSelectionDialog

  1. if response == Gtk::ResponseType::OK
  2. font_desc = Pango::FontDescription.new fdia.font_desc
  3. if font_desc
  4. @label.override_font font_desc
  5. end
  6. end

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

Gtk::ColorSelectionDialog

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

  1. #!/usr/bin/ruby
  2. '''
  3. ZetCode Ruby GTK tutorial
  4. This example presents the Gtk::ColorSelectionDialog.
  5. Author: Jan Bodnar
  6. Website: www.zetcode.com
  7. Last modified: May 2014
  8. '''
  9. require 'gtk3'
  10. class RubyApp < Gtk::Window
  11. def initialize
  12. super
  13. init_ui
  14. end
  15. def init_ui
  16. set_border_width 10
  17. @label = Gtk::Label.new "The only victory over love is flight."
  18. button = Gtk::Button.new :label => "Select colour"
  19. button.signal_connect "clicked" do
  20. on_clicked
  21. end
  22. fix = Gtk::Fixed.new
  23. fix.put button, 100, 30
  24. fix.put @label, 30, 90
  25. add fix
  26. set_title "Gtk::ColorSelectionDialog"
  27. signal_connect "destroy" do
  28. Gtk.main_quit
  29. end
  30. set_default_size 350, 150
  31. set_window_position :center
  32. show_all
  33. end
  34. def on_clicked
  35. cdia = Gtk::ColorSelectionDialog.new :title => "Select colour"
  36. response = cdia.run
  37. if response == Gtk::ResponseType::OK
  38. colorsel = cdia.color_selection
  39. col = colorsel.current_rgba
  40. @label.override_color :normal, col
  41. end
  42. cdia.destroy
  43. end
  44. end
  45. Gtk.init
  46. window = RubyApp.new
  47. Gtk.main

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

  1. cdia = Gtk::ColorSelectionDialog.new :title => "Select colour"

我们创建Gtk::ColorSelectionDialog

  1. if response == Gtk::ResponseType::OK
  2. colorsel = cdia.color_selection
  3. col = colorsel.current_rgba
  4. @label.override_color :normal, col
  5. end

如果按“确定”按钮,我们将获得颜色值并修改标签的颜色。

Ruby GTK 中的对话框 - 图6

图:Gtk::ColorSelectionDialog

在 Ruby GTK 教程的这一部分中,我们介绍了对话框。