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

标签 linux ubuntu-14.04 d glade gtkd

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

最佳答案

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

Note that the tools palette in Glade shows a Window widget and an ApplicationWindow widget. Since we're not drawing any menus, ensure you're using the Window widget instead of the ApplicationWidget. If you fail to do that, you'll get warnings when running the application, talking about some missing menu calls.

将其另存为 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;
}
  1. 编译很棘手。在 Ubuntu Linux 上,我必须创建如下语句。您可能需要在 dlang.org Learn forums 中进行交互针对您的特定平台。
# dmd hello.d `pkg-config --cflags --libs gtkd3`
  1. 编译后,您可以运行 D 可执行文件以显示 Hello World 对话框。在 Ubuntu Linux 上,我只是做了:

# ./hello

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

export NO_AT_BRIDGE=1

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

如果您遇到有关菜单的错误,则说明您使用了 ApplicationWindow 小部件而不是 Window 小部件,需要在 Glade 中切换它。

添加按钮和信号

  1. 我的做法是在Glade中点击一个widget,点击Signals,找到我要添加的事件,比如单击,然后在“处理程序”列中,键入一个函数。例如,在 button1 上,我会键入 onButton1Clicked。保存文件。

  2. 现在,在您的 D 源代码中,在您创建 Window 对象之后,立即添加此代码:

b.connectSignals(null);

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

  1. 在您的 D 源代码中,为该信号添加一个函数。例如,我做了:
extern(C) void onButton1Clicked()
{
    writeln("got here");
    Main.quit();
}

请注意,在这种情况下,extern(C) 是必需的。

  1. 重新编译并运行您的应用程序。您会看到它会针对该按钮点击自动运行您的新函数。

关于linux - 如何使用 Glade/GtkD 和 D 编程语言显示 Hello World,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32516092/

相关文章:

php - Laravel 5.2 - 如何通过 Modal/Controller 运行 shell 命令

c - 调试器 : "cannot open file: malloc.c"

c++ - 当轮廓上的第一个点偏离曲线时如何解释自由字形轮廓

Nginx 服务器中的 SSL 握手失败

interop - 与 C 版本 SDL2 链接时对 D 隐藏控制台

immutability - 如何创建对不可变类的可重新分配引用?

linux - 带 -exec 的 find 命令不运行 -exec 命令

gcc - ld:无法识别的选项 '--push-state--no-as-needed'

ubuntu - 虚幻引擎是否将其依赖项存储在文件本身中?

unicode - D 中原始字符类型有哪些限制?