【问题标题】:How To Show Hello World with Glade/GtkD and the D Programming Language如何使用 Glade/GtkD 和 D 编程语言显示 Hello World
【发布时间】:2015-09-11 05:29:11
【问题描述】:

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

【问题讨论】:

  • 如果你自己解决了这个问题,别忘了在这里也发布答案(你可以回答你自己的问题),这样搜索的人也可以看到。

标签: linux ubuntu-14.04 d glade gtkd


【解决方案1】:
  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 的标签。

请注意,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;
}
  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中点击一个小部件,点击Signals,找到我要添加的事件,比如点击,然后在 Handler 列中,输入一个函数。例如,在 button1 上,我会键入 onButton1Clicked。保存文件。

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

       b.connectSignals(null);

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-08
    • 2023-03-16
    • 1970-01-01
    • 2020-05-17
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多