====== 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** False True False vertical True False label False True 0 True True False True 1 button True True True False True 2 ===== 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' )