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

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

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

GtkMessageDialog

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

  1. <?php
  2. /*
  3. ZetCode PHP GTK tutorial
  4. This example demonstrates a
  5. GtkMessageDialog.
  6. author: Jan Bodnar
  7. website: www.zetcode.com
  8. last modified: September 2011
  9. */
  10. class Example extends GtkWindow {
  11. public function __construct() {
  12. parent::__construct();
  13. $this->init_ui();
  14. }
  15. public function init_ui() {
  16. $this->set_title('GtkMessageDialog');
  17. $this->connect_simple('destroy', array('gtk', 'main_quit'));
  18. $fixed = new GtkFixed();
  19. $button = new GtkButton("Information");
  20. $button->set_size_request($button->size_request());
  21. $button->connect('clicked', array($this, 'on_clicked'));
  22. $fixed->put($button, 50, 50);
  23. $this->add($fixed);
  24. $this->set_default_size(250, 200);
  25. $this->set_position(GTK::WIN_POS_CENTER);
  26. $this->show_all();
  27. }
  28. public function on_clicked($sender) {
  29. $md = new GtkMessageDialog($this, Gtk::DIALOG_MODAL,
  30. Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK, "Download completed.");
  31. $md->set_title("Information");
  32. $md->run();
  33. $md->destroy();
  34. }
  35. }
  36. new Example();
  37. Gtk::main();
  38. ?>

我们在窗口上显示一个按钮。 当我们单击按钮时,会显示一条信息消息。

  1. $button = new GtkButton("Information");

这是一个按钮,当我们单击它时将显示一个对话框。

  1. public function on_clicked($sender) {
  2. $md = new GtkMessageDialog($this, Gtk::DIALOG_MODAL,
  3. Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK, "Download completed.");
  4. $md->set_title("Information");
  5. $md->run();
  6. $md->destroy();
  7. }

如果单击信息按钮,将显示“信息”对话框。 Gtk::DIALOG_MODAL标志使对话框变为模态。 Gtk::MESSAGE_INFO指定对话框的类型。 在我们的情况下,这是一个信息对话框。 为各种对话框类型选择了不同的图标。 Gtk::BUTTONS_OK在对话框上显示确定按钮。 最后一个参数是显示的消息。 我们使用set_title()方法设置对话框的标题。 该对话框使用run()方法显示。 程序员还必须最后调用destroy()hide()方法。

对话框 - 图1

图:信息消息对话框

GtkAboutDialog

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

  1. <?php
  2. /*
  3. ZetCode PHP GTK tutorial
  4. This example demonstrates the
  5. AboutDialog dialog.
  6. author: Jan Bodnar
  7. website: www.zetcode.com
  8. last modified: September 2011
  9. */
  10. class Example extends GtkWindow {
  11. public function __construct() {
  12. parent::__construct();
  13. $this->init_ui();
  14. }
  15. public function init_ui() {
  16. $this->set_title('About Battery');
  17. $this->connect_simple('destroy', array('gtk', 'main_quit'));
  18. $fixed = new GtkFixed();
  19. $button = new GtkButton("About");
  20. $button->set_size_request(80, 30);
  21. $button->connect('clicked', array($this, 'on_clicked'));
  22. $fixed->put($button, 50, 50);
  23. $this->add($fixed);
  24. $this->set_default_size(250, 200);
  25. $this->set_position(GTK::WIN_POS_CENTER);
  26. $this->show_all();
  27. }
  28. public function on_clicked($sender) {
  29. $about = new GtkAboutDialog();
  30. $about->set_program_name("Battery");
  31. $about->set_version("0.1");
  32. $about->set_copyright("(c) Jan Bodnar");
  33. $about->set_comments("Battery is a simple tool for battery checking");
  34. $about->set_website("http://www.zetcode.com");
  35. $about->set_logo(GdkPixbuf::new_from_file("battery.png"));
  36. $about->run();
  37. $about->destroy();
  38. }
  39. }
  40. new Example();
  41. Gtk::main();
  42. ?>

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

  1. $about = new GtkAboutDialog();

我们创建GtkAboutDialog的实例。

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

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

  1. $about->set_logo(GdkPixbuf::new_from_file("battery.png"));

此行创建徽标。

对话框 - 图2

图:GtkAboutDialog

GtkFontSelectionDialog

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

  1. <?php
  2. /*
  3. ZetCode PHP GTK tutorial
  4. In this example, we change the font
  5. of a label with the GtkFontSelectionDialog.
  6. author: Jan Bodnar
  7. website: www.zetcode.com
  8. last modified: September 2011
  9. */
  10. class Example extends GtkWindow {
  11. private $label;
  12. public function __construct() {
  13. parent::__construct();
  14. $this->init_ui();
  15. }
  16. private function init_ui() {
  17. $this->set_title('FontSelectionDialog');
  18. $this->connect_simple('destroy', array('gtk', 'main_quit'));
  19. $this->set_border_width(10);
  20. $this->label = new GtkLabel("The only victory over love is flight.");
  21. $button = new GtkButton("Select font");
  22. $button->connect('clicked', array($this, 'on_clicked'));
  23. $fixed = new GtkFixed();
  24. $fixed->put($button, 100, 30);
  25. $fixed->put($this->label, 30, 90);
  26. $this->add($fixed);
  27. $this->set_default_size(350, 200);
  28. $this->set_position(GTK::WIN_POS_CENTER);
  29. $this->show_all();
  30. }
  31. public function on_clicked($sender) {
  32. $fdia = new GtkFontSelectionDialog("Select font name");
  33. $response = $fdia->run();
  34. if ($response == Gtk::RESPONSE_OK) {
  35. $font_desc = new PangoFontDescription($fdia->get_font_name());
  36. print($fdia->get_font_name());
  37. if ($font_desc) {
  38. $this->label->modify_font($font_desc);
  39. }
  40. }
  41. $fdia->destroy();
  42. }
  43. }
  44. new Example();
  45. Gtk::main();
  46. ?>

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

  1. $fdia = new GtkFontSelectionDialog("Select font name");

我们创建GtkFontSelectionDialog

  1. if ($response == Gtk::RESPONSE_OK) {
  2. $font_desc = new PangoFontDescription($fdia->get_font_name());
  3. print($fdia->get_font_name());
  4. if ($font_desc) {
  5. $this->label->modify_font($font_desc);
  6. }
  7. }

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

对话框 - 图3

图:GtkFontSelectionDialog

GtkColorSelectionDialog

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

  1. <?php
  2. /*
  3. ZetCode PHP GTK tutorial
  4. This example works with the
  5. GtkColorSelectionDialog.
  6. author: Jan Bodnar
  7. website: www.zetcode.com
  8. last modified: August 2011
  9. */
  10. class Example extends GtkWindow {
  11. private $label;
  12. public function __construct() {
  13. parent::__construct();
  14. $this->init_ui();
  15. }
  16. private function init_ui() {
  17. $this->set_title('GtkColorSelectionDialog');
  18. $this->connect_simple('destroy', array('gtk', 'main_quit'));
  19. $this->set_border_width(10);
  20. $this->label = new GtkLabel("The only victory over love is flight.");
  21. $button = new GtkButton("Select color");
  22. $button->connect('clicked', array($this, 'on_clicked'));
  23. $fixed = new GtkFixed();
  24. $fixed->put($button, 100, 30);
  25. $fixed->put($this->label, 30, 90);
  26. $this->add($fixed);
  27. $this->set_default_size(350, 200);
  28. $this->set_position(GTK::WIN_POS_CENTER);
  29. $this->show_all();
  30. }
  31. public function on_clicked($sender) {
  32. $cdia = new GtkColorSelectionDialog("Select color");
  33. $response = $cdia->run();
  34. if ($response == Gtk::RESPONSE_OK) {
  35. $colorsel = $cdia->colorsel;
  36. $color = $colorsel->get_current_color();
  37. $this->label->modify_fg(Gtk::STATE_NORMAL, $color);
  38. }
  39. $cdia->destroy();
  40. }
  41. }
  42. new Example();
  43. Gtk::main();
  44. ?>

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

  1. $cdia = new GtkColorSelectionDialog("Select color");
  2. $response = $cdia->run();

我们创建并运行GtkFontSelectionDialog

  1. if ($response == Gtk::RESPONSE_OK) {
  2. $colorsel = $cdia->colorsel;
  3. $color = $colorsel->get_current_color();
  4. $this->label->modify_fg(Gtk::STATE_NORMAL, $color);
  5. }

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

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