在Ubuntu Linux上,我可以使用Glade应用程序创建“Hello World”对话框。现在如何获得D编程语言来显示它?

最佳答案

  • 安装 DMD编译器,该编译器在Mac,Linux或Windows计算机上编译D语言。您可以获取有关此here的更多信息。
  • 在Mac,Linux或Windows计算机上安装 Glade界面设计器。您可以通过sudo apt-get install glade在Ubuntu Linux上轻松获得 Glade ,但是有关在其他各种平台上安装的更多信息是here
  • 在Mac,Linux或Windows计算机上安装 GTKd 。这不容易。您将需要从gtkd.org上的文档开始,然后在DLang.org Learn forum中进行交互以在必要时获得更多帮助。
  • 打开 Glade 并创建一个新窗口,上面带有标签,上面写着Hello World。



  • 将其另存为 hello.glade
  • 在文本编辑器中打开 hello.glade 文件,然后查找与以下内容相似的行:
  • <object class="GtkWindow" id="window1">
    id 属性的纸上写下。
  • 在与此 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;
    }
    
  • 编译很棘手。在Ubuntu Linux上,我必须创建如下语句。您可能需要针对特定​​平台在dlang.org Learn forums中进行交互。
  • # dmd hello.d `pkg-config --cflags --libs gtkd3`
    
  • 编译后,您可以运行D可执行文件以显示Hello World对话框。在Ubuntu Linux上,我只是这样做了:
  • # ./hello
  • 请注意,当您看到该窗口并将其关闭时,在Linux上可能会收到一些警告。 (在其他平台上,这可能会有所不同。)我收到有关“无法连接到辅助功能总线-连接被拒绝”的警告。至少在Linux上,此修复程序是将其添加到底部的〜/.bashrc 脚本中:
  • export NO_AT_BRIDGE=1
    现在,当您打开命令提示符并再次运行已编译的D命令“hello”时,
    它不会显示该错误。

    如果您发现有关菜单的错误,请使用 ApplicationWindow 小部件代替
    窗口窗口小部件,需要在 Glade 中进行切换。

    添加按钮和信号
  • 我的方法是单击 Glade 中的小部件,单击 Signals ,找到我要添加的事件,例如单击,然后在Handler列中键入一个函数。例如,在button1上,我将输入 onButton1Clicked 。保存文件。
  • 现在,在您的D源代码中,在创建Window对象之后,立即添加以下代码:
  • b.connectSignals(null);
    ...其中b是您的Builder变量。
  • 在您的D源代码中,为此信号添加一个函数。例如,我做到了:
  • extern(C) void onButton1Clicked()
    {
        writeln("got here");
        Main.quit();
    }
    

    请注意,在这种情况下,需要extern(C)。
  • 重新编译并运行您的应用程序。您会看到它会为该按钮单击自动运行新功能。
  • 关于linux - 如何使用Glade/GtkD和D编程语言显示Hello World,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32516092/

    10-11 23:02