原文: http://zetcode.com/gui/javascriptgtktutorial/widgets/

在 JavaScript GTK 编程教程的这一部分中,我们将介绍一些小部件。

小部件是 GUI 应用的基本构建块。 多年来,几个小部件已成为所有 OS 平台上所有工具包中的标准。 例如,按钮,复选框或滚动条。 GTK 工具箱的理念是将小部件的数量保持在最低水平。 将创建更多专门的窗口小部件作为自定义 GTK 窗口小部件。

CheckBox

CheckButton是具有两种状态的窗口小部件:打开和关闭。 接通状态通过复选标记显示。 它用来表示一些布尔属性。

  1. #!/usr/bin/seed
  2. /*
  3. ZetCode JavaScript GTK tutorial
  4. This program toggles the title of the
  5. window with the CheckButton widget.
  6. author: Jan Bodnar
  7. website: www.zetcode.com
  8. last modified: January 2014
  9. */
  10. Gtk = imports.gi.Gtk;
  11. Gtk.init(null, null);
  12. Example = new GType({
  13. parent: Gtk.Window.type,
  14. name: "Example",
  15. init: function ()
  16. {
  17. init_ui(this);
  18. function init_ui(w) {
  19. w.signal.hide.connect(Gtk.main_quit);
  20. w.set_default_size(300, 200);
  21. w.set_title("Check button");
  22. w.set_position(Gtk.WindowPosition.CENTER);
  23. var fix = new Gtk.Fixed();
  24. var cb = new Gtk.CheckButton.with_label("Show title");
  25. cb.set_active(true);
  26. cb.signal.clicked.connect(on_clicked);
  27. fix.put(cb, 50, 50);
  28. w.add(fix);
  29. w.show_all();
  30. function on_clicked(w) {
  31. if (w.get_active()) {
  32. window.set_title("Check Button");
  33. } else {
  34. window.set_title("");
  35. }
  36. }
  37. }
  38. }
  39. });
  40. var window = new Example();
  41. Gtk.main();

根据CheckButton的状态,我们将在窗口的标题栏中显示标题。

  1. var cb = new Gtk.CheckButton.with_label("Show title");

CheckButton小部件已创建。 小部件的构造器采用一个参数,即标签。 标签显示在复选框旁边。

  1. cb.set_active(true);

默认情况下标题是可见的,因此我们默认情况下选中复选按钮。

  1. cb.signal.clicked.connect(on_clicked);

如果我们单击复选框小部件,则会发出单击的信号。 我们将on_clicked()方法挂接到信号上。

  1. if (w.get_active()) {
  2. window.set_title("Check Button");
  3. } else {
  4. window.set_title("");
  5. }

如果选中该按钮,我们将显示标题。 get_active()方法用于确定检查按钮的状态。 set_title()方法用于设置窗口的标题。 为了清除窗口的标题,我们使用一个空字符串。

JavaScript GTK 中的小部件 - 图1

图:CheckButton

Label

Label小部件显示文本。 此小部件不支持用户交互。

  1. #!/usr/bin/seed
  2. /*
  3. ZetCode JavaScript GTK tutorial
  4. This example demonstrates the Label widget.
  5. author: Jan Bodnar
  6. website: www.zetcode.com
  7. last modified: January 2014
  8. */
  9. Gtk = imports.gi.Gtk;
  10. Gtk.init(null, null);
  11. var lyrics = "Meet you downstairs in the bar and heard\n\
  12. your rolled up sleeves and your skull t-shirt\n\
  13. You say why did you do it with him today?\n\
  14. and sniff me out like I was Tanqueray\n\
  15. \n\
  16. cause you're my fella, my guy\n\
  17. hand me your stella and fly\n\
  18. by the time I'm out the door\n\
  19. you tear men down like Roger Moore\n\
  20. \n\
  21. I cheated myself\n\
  22. like I knew I would\n\
  23. I told ya, I was trouble\n\
  24. you know that I'm no good";
  25. Example = new GType({
  26. parent: Gtk.Window.type,
  27. name: "Example",
  28. init: function()
  29. {
  30. init_ui(this);
  31. function init_ui(w) {
  32. w.signal.hide.connect(Gtk.main_quit);
  33. w.set_default_size(250, 200);
  34. w.set_title("You know I'm no Good");
  35. w.set_position(Gtk.WindowPosition.CENTER);
  36. w.set_border_width(10);
  37. var label = new Gtk.Label.c_new(lyrics);
  38. w.add(label);
  39. w.show_all();
  40. }
  41. }
  42. });
  43. var window = new Example();
  44. Gtk.main();

该代码示例在窗口上显示了一些歌词。

  1. var lyrics = "Meet you downstairs in the bar and heard\n\
  2. your rolled up sleeves and your skull t-shirt\n\

我们创建多行文本。 在 JavaScript 中,多行文本由以换行符和反斜杠结尾的文本行组成。 反斜杠使 JavaScript 中的字符串可以跨越多个源代码行。 换行符在更多行中显示字符串。

  1. w.set_border_width(10);

Label周围有一些空白。

  1. var label = new Gtk.Label.c_new(lyrics);
  2. w.add(label);

Label小部件已创建并添加到窗口。

JavaScript GTK 中的小部件 - 图2

图:Label小部件

Entry

Entry是单行文本输入字段。 该小部件用于输入文本数据。

  1. #!/usr/bin/seed
  2. /*
  3. ZetCode JavaScript GTK tutorial
  4. This example demonstrates the Entry widget.
  5. author: Jan Bodnar
  6. website: www.zetcode.com
  7. last modified: January 2014
  8. */
  9. Gtk = imports.gi.Gtk;
  10. Gtk.init(null, null);
  11. Example = new GType({
  12. parent: Gtk.Window.type,
  13. name: "Example",
  14. init: function()
  15. {
  16. init_ui(this);
  17. function init_ui(w) {
  18. w.signal.hide.connect(Gtk.main_quit);
  19. w.set_default_size(250, 200);
  20. w.set_title("Entry");
  21. w.set_position(Gtk.WindowPosition.CENTER);
  22. var fixed = new Gtk.Fixed();
  23. var label = new Gtk.Label.c_new("...");
  24. fixed.put(label, 60, 40);
  25. var entry = new Gtk.Entry();
  26. fixed.put(entry, 60, 100);
  27. entry.signal.key_release_event.connect(function(sender) {
  28. label.set_text(sender.text);
  29. return false;
  30. });
  31. w.add(fixed);
  32. w.show_all();
  33. }
  34. }
  35. });
  36. var window = new Example();
  37. Gtk.main();

此示例显示了条目小部件和标签。 我们输入的文本将立即显示在标签小部件中。

  1. var entry = new Gtk.Entry();

Entry小部件已创建。

  1. entry.signal.key_release_event.connect(function(sender) {
  2. label.set_text(sender.text);
  3. return false;
  4. });

我们将匿名方法插入Entry小部件的key_release_event。 我们通过text属性从窗口小部件中获取文本并将其设置为标签。

JavaScript GTK 中的小部件 - 图3

图:Entry小部件

Image

Image小部件在窗口上显示图像。

  1. #!/usr/bin/seed
  2. /*
  3. ZetCode JavaScript GTK tutorial
  4. This example demonstrates the Image widget.
  5. author: Jan Bodnar
  6. website: www.zetcode.com
  7. last modified: January 2014
  8. */
  9. Gtk = imports.gi.Gtk;
  10. Gtk.init(null, null);
  11. Example = new GType({
  12. parent: Gtk.Window.type,
  13. name: "Example",
  14. init: function()
  15. {
  16. init_ui(this);
  17. function init_ui(w) {
  18. w.signal.hide.connect(Gtk.main_quit);
  19. w.set_default_size(250, 200);
  20. w.set_title("You know I'm no Good");
  21. w.set_position(Gtk.WindowPosition.CENTER);
  22. w.set_border_width(2);
  23. var image = new Gtk.Image.from_file("redrock.png");
  24. w.add(image);
  25. w.show_all();
  26. }
  27. }
  28. });
  29. var window = new Example();
  30. Gtk.main();

在我们的示例中,我们在窗口上显示图像。

  1. w.set_border_width(2);

我们在图像周围放置了一些空边框。

  1. var image = new Gtk.Image.from_file("redrock.png");

Image小部件已创建。 小部件会自行处理错误。 如果无法加载图像,它将显示一个损坏的图标。

  1. w.add(image);

小部件已添加到容器中。

JavaScript GTK 中的小部件 - 图4

图:图像 widget

在 JavaScript GTK 教程的这一章中,我们展示了一些基本的小部件。