В Ubuntu Linux я могу использовать приложение Glade для создания диалогового окна Hello World. Теперь, как мне заставить язык программирования D отображать его?
Как показать Hello World с помощью Glade/GtkD и языка программирования D
Ответы (1)
- Установите компилятор DMD, который компилирует язык D, на свой компьютер Mac, Linux или Windows. Вы можете получить дополнительную информацию об этом здесь.
- Установите дизайнер интерфейса Glade на свой компьютер Mac, Linux или Windows. Вы можете легко получить Glade в Ubuntu Linux с помощью
sudo apt-get install glade
, но более подробная информация об установке на различных других платформах находится здесь а>. - Установите GTKd на свой компьютер Mac, Linux или Windows. Это непросто. Вам нужно будет начать с документации на gtkd.org, а затем взаимодействовать на Форум DLang.org Learn для получения дополнительной помощи в случае необходимости.
- Откройте Glade и создайте новое окно с надписью Hello World.
Обратите внимание, что палитра инструментов в Glade показывает виджет Окно и виджет Окно приложения. Поскольку мы не рисуем никаких меню, убедитесь, что вы используете виджет Window вместо ApplicationWidget. Если вы этого не сделаете, при запуске приложения вы получите предупреждения о некоторых отсутствующих вызовах меню.
Сохраните его как hello.glade.
- Откройте файл hello.glade в текстовом редакторе и найдите строку, похожую на эту:
<object class="GtkWindow" id="window1">
Запишите на листе бумаги этот атрибут id.
- Создайте сценарий 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;
}
- Компиляция сложная. В Ubuntu Linux мне пришлось создать оператор, подобный следующему. Возможно, вам придется взаимодействовать на форумах dlang.org Learn для вашей конкретной платформы.
# 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 вместо виджета Window, и вам нужно будет переключить его в Glade.
Добавление кнопок и сигналов
Я делаю это следующим образом: щелкаю виджет в Glade, нажимаю Сигналы, нахожу событие, которое хочу добавить, например щелкнул, а затем в столбце Обработчик введите функцию. Например, для кнопки 1 я бы набрал onButton1Clicked. Сохраните файл.
Теперь, в исходном коде D, сразу после создания объекта Window добавьте этот код:
b.connectSignals(null);
... где b - ваша переменная Builder.
- В исходном коде D добавьте функцию для этого сигнала. Например, я сделал:
extern(C) void onButton1Clicked()
{
writeln("got here");
Main.quit();
}
Обратите внимание, что в этом случае требуется extern(C).
- Перекомпилируйте и запустите приложение. Вы увидите, что он автоматически запускает вашу новую функцию для нажатия этой кнопки.