Как показать Hello World с помощью Glade/GtkD и языка программирования D

В Ubuntu Linux я могу использовать приложение Glade для создания диалогового окна Hello World. Теперь, как мне заставить язык программирования D отображать его?


person Volomike    schedule 11.09.2015    source источник
comment
если вы решили это самостоятельно, не забудьте также опубликовать ответ здесь (вы можете ответить на свой вопрос), чтобы люди, которые ищут, тоже могли его увидеть.   -  person Adam D. Ruppe    schedule 11.09.2015


Ответы (1)


  1. Установите компилятор DMD, который компилирует язык D, на свой компьютер Mac, Linux или Windows. Вы можете получить дополнительную информацию об этом здесь.
  2. Установите дизайнер интерфейса Glade на свой компьютер Mac, Linux или Windows. Вы можете легко получить Glade в Ubuntu Linux с помощью sudo apt-get install glade, но более подробная информация об установке на различных других платформах находится здесь.
  3. Установите GTKd на свой компьютер Mac, Linux или Windows. Это непросто. Вам нужно будет начать с документации на gtkd.org, а затем взаимодействовать на Форум DLang.org Learn для получения дополнительной помощи в случае необходимости.
  4. Откройте Glade и создайте новое окно с надписью Hello World.

Обратите внимание, что палитра инструментов в Glade показывает виджет Окно и виджет Окно приложения. Поскольку мы не рисуем никаких меню, убедитесь, что вы используете виджет Window вместо ApplicationWidget. Если вы этого не сделаете, при запуске приложения вы получите предупреждения о некоторых отсутствующих вызовах меню.

Сохраните его как hello.glade.

  1. Откройте файл hello.glade в текстовом редакторе и найдите строку, похожую на эту:

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

Запишите на листе бумаги этот атрибут id.

  1. Создайте сценарий hello.d в том же каталоге, что и этот файл hello.glade, и измените следующее содержимое, изменив 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 для вашей конкретной платформы.
# 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, нажимаю Сигналы, нахожу событие, которое хочу добавить, например щелкнул, а затем в столбце Обработчик введите функцию. Например, для кнопки 1 я бы набрал onButton1Clicked. Сохраните файл.

  2. Теперь, в исходном коде D, сразу после создания объекта Window добавьте этот код:

b.connectSignals(null);

... где b - ваша переменная Builder.

  1. В исходном коде D добавьте функцию для этого сигнала. Например, я сделал:
extern(C) void onButton1Clicked()
{
    writeln("got here");
    Main.quit();
}

Обратите внимание, что в этом случае требуется extern(C).

  1. Перекомпилируйте и запустите приложение. Вы увидите, что он автоматически запускает вашу новую функцию для нажатия этой кнопки.
person Volomike    schedule 12.09.2015