====== Hello world in GTK-D ======
Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **// 03/07/2025 12:56 //** // //
Funziona ancora , ma io userei [[programmazione:d:gid:hello_world|Hello world in gtk4 e linguaggio D usando Gid]]
Un hello world che mostra le basi di una finestra GTK-D . \\
Trovo la documentazione un pochino carente al momento. Mi sono aiutato guardando gli esempi dentro la directory "demos" del
[[https://github.com/gtkd-developers/GtkD/tree/master|repository ufficiale GtkD]] . In più dato che ho usato dub package manager ho trovato utile dare una sbirciata direttamente al codice sorgente di GTK-D . I file si trovano qui:
ls $HOME/.dub/packages/gtk-d/3.11.0/gtk-d/generated/gtkd/gtk
Altra risorsa utile: [[https://code.dlang.org/packages/gid-gtk4-examples|gid-gtk4-examples]]
===== Una semplice finestra con un bottone =====
import gtk.MainWindow;
import gtk.Label;
import gtk.Main;
import gtk.Button;
import std.stdio;
void onClicked(Button b)
{
writeln("Cliccato.");
}
void main(string[] args)
{
Main.init(args);
MainWindow win = new MainWindow("Hello World");
win.setDefaultSize(200, 100);
auto mybtn=new Button();
mybtn.setLabel("Clicca");
mybtn.addOnClicked(delegate void(Button b){
onClicked(b);
b.setLabel("Cliccato.");
});
win.add(mybtn);
win.showAll();
Main.run();
}
**dub.json**
{
"authors": [
"fabio"
],
"copyright": "Copyright © 2025, fabio",
"dependencies": {
"gtk-d": "~>3.11.0"
},
"description": "A minimal D application.",
"license": "GPL-2.0-only",
"name": "gtk3-builder"
}
===== Uso di Gtk Builder e Glade =====
**app.d**
import gio.Application: GioApplication = Application;
import gtk.Application;
import gtk.ApplicationWindow;
import gtk.Builder;
import gtk.Button;
import gtk.Entry;
import gtk.Label;
import std.stdio;
import core.stdc.stdlib;
int main(string[] args)
{
auto application = new Application("org.gtkd.demo.builder.builderTest", GApplicationFlags.FLAGS_NONE);
void initGui(GioApplication a)
{
auto builder = new Builder();
if( ! builder.addFromFile("gui.ui") ) {
writeln("Oops, could not create Glade object, check your glade file ;)");
exit(1);
}
auto mywin = cast(ApplicationWindow)builder.getObject("mywin");
if (mywin is null)
{
writeln("mywin è null");
}
mywin.setApplication(application);
mywin.setTitle("This is a glade application window");
auto mylabel = cast(Label)builder.getObject("mylabel");
auto myentry = cast(Entry)builder.getObject("myentry");
auto mybutton = cast(Button)builder.getObject("mybutton");
mybutton.addOnClicked(delegate void(Button b){
string t= myentry.getText();
if (t!="")
{
mylabel.setLabel(t);
}else{
mylabel.setLabel("Inserisci il testo nella entry e clicca sul bottone.");
}
});
mywin.showAll();
}
application.addOnActivate(&initGui);
return application.run(args);
}
**gui.ui**
===== Un meson.build =====
Uso il compilatore ldc e lib[g]phobos da gdc.
project('simple', 'd',
version : '0.1',
default_options : ['buildtype=debugoptimized']
)
gtk_pkg = 'gtk+-3.0'
gtkd_pkg = 'gtkd-3'
gtk = dependency(gtk_pkg, method: 'pkg-config')
gtkd = dependency(gtkd_pkg, method: 'pkg-config')
# se gtkd non è trovato, prova a usare i flags manuali (opzionale)
if not gtkd.found()
error('gtkD pkg-config dependency "' + gtkd_pkg + '" non trovata. Assicurati che gtkd sia installato e pkg-config veda gtkD-3.0.')
endif
# sorgenti
sources = files('main.d')
# target eseguibile
executable('simple',
sources,
dependencies: [gtkd, gtk],
install: true,
link_args: ['-Wl,-Bstatic', '-lgphobos', '-Wl,-Bdynamic']
#d_module_version: '0.1'
)