如何使用Glade/GtkD和D编程语言显示Hello World

Vol*_*ike 5 linux d glade gtkd ubuntu-14.04

在Ubuntu Linux上,我可以使用Glade应用程序创建一个Hello World对话框.现在我如何让D编程语言显示它?

Vol*_*ike 11

  1. 安装在Mac,Linux或Windows计算机上编译D语言的DMD编译器.你可以在这里获得更多相关信息.
  2. 在Mac,Linux或Windows计算机上安装Glade界面设计器.你可以很容易地在Ubuntu Linux上获得Gladesudo apt-get install glade,但是有关在各种其他平台上安装的更多信息都在这里.
  3. 在Mac,Linux或Windows计算机上安装GTKd.这并不容易.您需要从gtkd.org上的文档开始,然后在DLang.org学习论坛中进行交互,以便在必要时获得更多帮助.
  4. 打开Glade并创建一个新窗口,上面有一个标签,上面写着Hello World.

请注意,Glade中的工具选项板显示了一个Window小部件和一个ApplicationWindow小部件.由于我们没有绘制任何菜单,因此请确保使用Window小部件而不是ApplicationWidget.如果你没有这样做,你会在运行应用程序时收到警告,谈论一些丢失的菜单调用.

       将其保存为hello.glade.

  1. 在文本编辑器中打开hello.glade文件,然后查找与此类似的行:

      <object class="GtkWindow" id="window1">

       写下一张id属性的纸.

  1. 在与此hello.glade文件相同的目录中创建一个hello.d脚本,并更改以下内容,将window1更改为您之前记下的ID.
import gtk.Builder;
import gtk.Main;
import gtk.Widget;
import gtk.Window;
import std.stdio;

int main (string[] args)
{
    Main.init(args);
    Builder b = new Builder();
    b.addFromFile("hello.glade");
    Window w = cast(Window)b.getObject("window1");
    w.addOnHide( delegate void(Widget aux){ Main.quit(); } );
    w.showAll();
    Main.run();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  1. 编译很棘手.在Ubuntu Linux上,我必须创建如下语句.您可能需要在dlang.org Learn论坛中与您的特定平台进行互动.
# dmd hello.d `pkg-config --cflags --libs gtkd3`
Run Code Online (Sandbox Code Playgroud)
  1. 编译完成后,您可以运行D可执行文件来显示Hello World对话框.在Ubuntu Linux上,我只是做了:

       # ./hello

  1. 请注意,当您看到窗口并关闭它时,您可能会在Linux上收到一些警告.(在其他平台上,这可能会有所不同.)我收到一条警告"无法连接到辅助功能总线 - 连接被拒绝".至少在Linux上的修复是将它添加到底部的〜/ .bashrc脚本中:

       export NO_AT_BRIDGE=1

       现在,当您打开命令提示符并再次运行已编译的D命令"hello"时,它将不会显示该错误.

       如果您收到有关菜单的错误,那么您使用ApplicationWindow小部件而不是         Window小部件,并且需要在Glade中切换它.

添加按钮和信号

  1. 我这样做的方法是单击Glade中的小部件,单击Signals,找到我要添加的事件,例如单击,然后在Handler列中输入一个函数.例如,在button1上,我会输入onButton1Clicked.保存文件.

  2. 现在,在D源代码中,在创建Window对象之后,添加以下代码:

       b.connectSignals(null);

       ...其中b是您的Builder变量.

  1. 在D源代码中,为此信号添加一个函数.例如,我做了:
extern(C) void onButton1Clicked()
{
    writeln("got here");
    Main.quit();
}
Run Code Online (Sandbox Code Playgroud)

       注意,在这种情况下,需要extern(C).

  1. 重新编译并运行您的应用程序.您将看到它会自动运行该按钮单击的新功能.